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();
}
}
}
}
}