仿京东首页


    implementation 'com.facebook.fresco:fresco:0.11.0'
    implementation 'com.hjm:BottomTabBar:1.1.1'
    implementation 'com.gyf.immersionbar:immersionbar:2.3.1'
    implementation 'com.sunfusheng:marqueeview:1.3.2'
    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
    implementation 'com.jakewharton:butterknife:8.8.1'
    implementation 'org.greenrobot:eventbus:3.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
    implementation 'com.youth.banner:banner:1.4.9'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
    testImplementation 'junit:junit:4.12'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    implementation 'cn.yipianfengye.android:zxing-library:2.2'
    implementation 'com.fynn.fluidlayout:fluidlayout:1.0'





  <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />












api:
http://www.zhaoapi.cn/home/getHome


HttpUtils
package com.example.jingd.utils;

import com.example.jingd.api.Api;
import com.example.jingd.constant.Constant;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class HttpUtils {

    public final Api api;

    public HttpUtils(){
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addNetworkInterceptor(new LoggingIntercepter())
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(Constant.BASE_URL)
                .build();
        api = retrofit.create(Api.class);
    }


    class LoggingIntercepter implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            long l = System.nanoTime();
            Response proceed = chain.proceed(request);
            long l1 = System.nanoTime();
            return proceed;
        }
    }
    private static class GetHttpUtilsInstance {
        private static HttpUtils httpUtils = new HttpUtils();
    }

    public static HttpUtils getHttpUtilsInstance() {
        return GetHttpUtilsInstance.httpUtils;
    }

}
view
public interface IView {
    void onsuccess(ShowBean showBean);
    void onfailure(String msg);
}
Ipersenter

public class IPersenter {
    IView iView;

    public IPersenter(IView iView) {
        this.iView = iView;
    }

    public void getData() {
        Observable<ShowBean> showye = HttpUtils.getHttpUtilsInstance().api.showye();
        showye.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ShowBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(ShowBean showBean) {
                        iView.onsuccess(showBean);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("ssss","错误");
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

MyScrollView 
package com.example.jingd.app;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;


public class MyScrollView extends ScrollView {

    public MyScrollView(Context context) {
        this(context,null,0);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (onScrollChanged!=null){
            onScrollChanged.onScrollChanged(l, t, oldl, oldt);
        }
    }
    public interface OnScrollChanged{
        void onScrollChanged(int x, int y, int oldx, int oldy);
    }
    private OnScrollChanged onScrollChanged;

    public void setOnScrollChanged(OnScrollChanged onScrollChanged) {
        this.onScrollChanged = onScrollChanged;
    }
}
首页布局:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fadingEdge="vertical"
    android:scrollbars="vertical">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fadingEdge="vertical"
        android:scrollbars="vertical">


        <com.example.jingd.app.MyScrollView
            android:id="@+id/indexView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:fillViewport="true">

            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="15dp"
                android:orientation="vertical">


                <com.youth.banner.Banner
                    android:id="@+id/banner"
                    android:layout_width="match_parent"
                    android:layout_height="160dp" />

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/ShowFen_RecyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="60dp"
                        android:layout_height="35dp"
                        android:background="#ccc"
                        android:gravity="center_horizontal"
                        android:paddingLeft="2dp"
                        android:text="京东"
                        android:textSize="20dp" />

                    <com.sunfusheng.marqueeview.MarqueeView
                        android:id="@+id/marqueeView"
                        android:layout_width="match_parent"
                        android:layout_height="35dp"
                        android:layout_gravity="center"
                        android:background="#ccc" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/jingd_miaosha"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="40dp"
                        android:layout_centerInParent="true"
                        android:background="#F0F0F0"
                        android:gravity="center"
                        android:text="为/你/推/荐"
                        android:textColor="#F47AFF"
                        android:textSize="20px" />

                    <TextView
                        android:id="@+id/tui_name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="20sp" />

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/tuijian_RecyclerView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content" />

                </LinearLayout>

            </LinearLayout>

        </com.example.jingd.app.MyScrollView>

        <include layout="@layout/page_layout" />

    </RelativeLayout>

</ScrollView>


layout_bg
<size android:width="20dp" android:height="200dp"/>
<solid android:color="#fff"/>
<corners android:radius="100dp"/>

MyLoader 
public class MyLoader extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        imageView.setImageURI(Uri.parse((String)path));
    }

    @Override
    public ImageView createImageView(Context context) {
        return new SimpleDraweeView(context);
    }
}

 

ShowRevAdapter

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="80dp"
    android:orientation="vertical"
    android:layout_height="80dp">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_marginTop="5dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/show_fenlei_item_sim"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/show_fenlei_item_name"
        android:textSize="10dp"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>
package com.example.jingd.adapter;

import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.jingd.R;
import com.example.jingd.bean.ShowBean;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

public class ShowRevAdapter extends RecyclerView.Adapter<ShowRevAdapter.ViewHolder> {

    Context context;
    List<ShowBean.DataBean.FenleiBean> fenleiBeans;

    public ShowRevAdapter(Context context, List<ShowBean.DataBean.FenleiBean> fenleiBeans) {
        this.context = context;
        this.fenleiBeans = fenleiBeans;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.show_fenlei_item_layout, parent, false);
        return new ViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        Uri uri = Uri.parse(fenleiBeans.get(position).getIcon());
        holder.show_fenlei_item_sim.setImageURI(uri);
        holder.show_fenlei_item_name.setText(fenleiBeans.get(position).getName());
    }

    @Override
    public int getItemCount() {
        return fenleiBeans.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        SimpleDraweeView show_fenlei_item_sim;
        TextView show_fenlei_item_name;

        public ViewHolder(View itemView) {
            super(itemView);
            show_fenlei_item_sim = itemView.findViewById(R.id.show_fenlei_item_sim);
            show_fenlei_item_name = itemView.findViewById(R.id.show_fenlei_item_name);
        }
    }
}
ShowTuijianAdapter 



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/tui_img"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center" />

    <TextView
        android:id="@+id/tui_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>




public class ShowTuijianAdapter extends RecyclerView.Adapter<ShowTuijianAdapter.ViewHolder> {

    Context context;
    List<ShowBean.DataBean.TuijianBean.ListBeanX> tuijianBeans;

    public ShowTuijianAdapter(Context context, List<ShowBean.DataBean.TuijianBean.ListBeanX> tuijianBeans) {
        this.context = context;
        this.tuijianBeans = tuijianBeans;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.tuijian_item_layout, parent, false);
        return new ViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        String[] split = tuijianBeans.get(position).getImages().split("\\|");
        Uri uri = Uri.parse(split[0]);
        holder.tui_img.setImageURI(uri);
        holder.tui_text.setText(tuijianBeans.get(position).getTitle());

    }

    @Override
    public int getItemCount() {
        return tuijianBeans.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        SimpleDraweeView tui_img;
        TextView tui_text;

        public ViewHolder(View itemView) {
            super(itemView);
            tui_img = itemView.findViewById(R.id.tui_img);
            tui_text = itemView.findViewById(R.id.tui_text);

        }
    }

}

 

 

package com.example.jingd.app;

import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;

public class CustomView extends ViewGroup {

    private int mleftMargin=20;
    private int mtopMargin=20;

    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int leftMargin = mleftMargin;
        int topMargin = mtopMargin;

        for (int j = 0; j < getChildCount(); j++) {
            int measuredWidth = getChildAt(j).getMeasuredWidth();
            int measuredHeight = getChildAt(j).getMeasuredHeight();
            if (leftMargin+measuredWidth+mleftMargin>getWidth()){
                leftMargin=mleftMargin;
                topMargin+=measuredHeight+mtopMargin;
                getChildAt(j).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
            }else {
                getChildAt(j).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
            }
            leftMargin+=measuredWidth+mleftMargin;
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        measureChildren(widthMeasureSpec,heightMeasureSpec);
        int leftMargin = mleftMargin;
        int topMargin = mtopMargin;

        int viewHeight = 0;
        int viewWidth = 0;

        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
        int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
        int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
        int modeHeight = MeasureSpec.getMode(heightMeasureSpec);

        switch (modeHeight){
            case MeasureSpec.AT_MOST:
                int measuredHeight = 0;
                for (int j = 0; j < getChildCount(); j++) {
                    int measuredWidth = getChildAt(j).getMeasuredWidth();
                    measuredHeight = getChildAt(j).getMeasuredHeight();
                    if (leftMargin+measuredWidth+mleftMargin>getWidth()){
                        leftMargin=mleftMargin;
                        topMargin+=measuredHeight+mtopMargin;
                    }
                    leftMargin+=measuredWidth+mleftMargin;
                }
                topMargin+=measuredHeight+mtopMargin;
                break;
        }
        setMeasuredDimension(sizeWidth,topMargin);

    }
}

ShowFragment


public class ShowFragment extends Fragment implements IView {

    Unbinder unbinder;
    @BindView(R.id.banner)
    Banner banner;
    @BindView(R.id.ShowFen_RecyclerView)
    RecyclerView ShowFenRecyclerView;
    @BindView(R.id.marqueeView)
    MarqueeView marqueeView;
    @BindView(R.id.tuijian_RecyclerView)
    RecyclerView tuijianRecyclerView;
    @BindView(R.id.jingd_miaosha)
    TextView jingdMiaosha;
    @BindView(R.id.sm_btn)
    Button smBtn;
    @BindView(R.id.chenjin)
    LinearLayout chenjin;
    @BindView(R.id.tui_name)
    TextView tuiName;
    @BindView(R.id.indexView)
    MyScrollView indexView;
    @BindView(R.id.sel_et)
    EditText selEt;
    @BindView(R.id.btn)
    ImageView btn;
    @BindView(R.id.afl_cotent)
    CustomView aflCotent;
    private List<String> list;
    int timer = 1000000000;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.showfragment_layout, container, false);
        unbinder = ButterKnife.bind(this, inflate);
        initView();
        initData();
        return inflate;
    }

    private void initData() {
        CountDownTimer countDownTimer = new CountDownTimer(timer, 1000) {
            @Override
            public void onTick(long l) {
                String format = simpleDateFormat.format(new Date(l));
                jingdMiaosha.setTextColor(Color.RED);
                jingdMiaosha.setText("京东秒杀:" + format);

                selEt.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        startActivity(new Intent(getActivity(), LiushiActivity.class));
                    }
                });
            }

            @Override
            public void onFinish() {

            }
        }.start();

    }

    private void initView() {
        tuijianRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
        ShowFenRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2, LinearLayoutManager.HORIZONTAL, false));
        IPersenter iPersenter = new IPersenter(this);
        iPersenter.getData();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }

    @Override
    public void onsuccess(ShowBean showBean) {
        //轮播
        initBanner(showBean);
        //首页分类
        initFenlei(showBean);
        //跑马灯
        initPao(showBean);
        //推荐
        initTuijian(showBean);

        //沉浸式
        chenjin.getBackground().setAlpha(0);
        indexView.setOnScrollChanged(new MyScrollView.OnScrollChanged() {
            @Override
            public void onScrollChanged(int x, int y, int oldx, int oldy) {
                if (y < 270) {
                    int i = (int) ((float) y / (float) 270 * 255);
                    chenjin.getBackground().setAlpha(i);
                } else {
                    chenjin.getBackground().setAlpha(255);
                }
            }
        });
    }

    //推荐
    private void initTuijian(ShowBean showBean) {
        final List<ShowBean.DataBean.TuijianBean.ListBeanX> tuijianList = showBean.getData().getTuijian().getList();
        ShowTuijianAdapter showTuijianAdapter = new ShowTuijianAdapter(getActivity(), tuijianList);
        tuijianRecyclerView.setAdapter(showTuijianAdapter);

    }

    //跑马灯
    private void initPao(ShowBean showBean) {
        List<String> paomadeng = new ArrayList<>();
        ShowBean.DataBean.MiaoshaBean miaosha = showBean.getData().getMiaosha();
        for (int i = 0; i < miaosha.getList().size(); i++) {
            paomadeng.add(miaosha.getList().get(i).getTitle());
        }
        marqueeView.startWithList(paomadeng);
        marqueeView.startWithList(paomadeng, R.anim.anim_bottom_in, R.anim.anim_bottom_out);

    }

    //首页分类
    private void initFenlei(ShowBean showBean) {
        ShowRevAdapter showRevAdapter = new ShowRevAdapter(getActivity(), showBean.getData().getFenlei());
        ShowFenRecyclerView.setAdapter(showRevAdapter);
    }

    //轮播
    private void initBanner(ShowBean showBean) {
        List<ShowBean.DataBean.BannerBean> ban = showBean.getData().getBanner();
        list = new ArrayList<>();
        for (int i = 0; i < ban.size(); i++) {
            list.add(ban.get(i).getIcon().replace("https","http"));
        }

        banner.setImages(list)
                .setImageLoader(new MyLoader())
                .isAutoPlay(true)
                .start();

    }

    @Override
    public void onfailure(String msg) {

    }

    //二维码
    @OnClick(R.id.sm_btn)
    public void onViewClicked() {
        Intent intent = new Intent(getActivity(), CaptureActivity.class);
        startActivityForResult(intent, 1);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (null != data) {
                Bundle extras = data.getExtras();
                if (extras == null) {
                    return;
                }
                if (extras.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    String string = extras.getString(CodeUtils.RESULT_STRING);
                    Toast.makeText(getActivity(), "解析结果:" + string, Toast.LENGTH_SHORT).show();
                } else if (extras.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
                    Toast.makeText(getActivity(), "解析二维码失败", Toast.LENGTH_LONG).show();

                }
            }
        }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值