activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.my1023.MainActivity"> <com.example.administrator.my1023.zidingyi.MyScrollView android:id="@+id/index_sv" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.youth.banner.Banner android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/index_banner"></com.youth.banner.Banner> <android.support.v7.widget.RecyclerView android:id="@+id/index_jgg" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="60dp" android:layout_height="20dp" android:src="@drawable/kaui"/> <ViewFlipper android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:autoStart="true" android:flipInterval="3000" android:inAnimation="@anim/anim_in" android:outAnimation="@anim/anim_out"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:text="hot vivo X20 带你开启全面屏时代!逆光也清晰,照亮你的美!" android:textSize="12dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:text="推荐 【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机" android:textSize="12dp" /> </ViewFlipper> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:layout_width="60dp" android:layout_height="20dp" android:src="@drawable/miaos" /> <TextView android:text="00点场" android:id="@+id/index_even" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" /> <TextView android:layout_marginLeft="15dp" android:id="@+id/index_hour" android:text="00" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text=":" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/index_minute" android:text="00" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text=":" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/index_second" android:text="00" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/tuijian" /> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/index_tuijian"></android.support.v7.widget.RecyclerView> </LinearLayout> </com.example.administrator.my1023.zidingyi.MyScrollView> <include layout="@layout/mysearch"/> </RelativeLayout>
mysearch.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/sousuokuang" android:background="#FFF9F9" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:gravity="center_vertical"> <TextView android:id="@+id/mysearch_sao" android:gravity="center" android:text="扫一扫" android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="2" /> <RelativeLayout android:id="@+id/mysearch_rl" android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="6" android:background="@drawable/suosuo"> <ImageView android:layout_marginTop="3dp" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:src="@drawable/a_4" /> <ImageView android:layout_marginTop="3dp" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:src="@drawable/root" /> </RelativeLayout> <TextView android:id="@+id/mysearch_info" android:gravity="center" android:text="消息" android:layout_width="0dp" android:layout_height="30dp" android:layout_weight="2" /> </LinearLayout>
jgg_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" android:padding="5dp" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/jgg_img" app:placeholderImage="@drawable/ic_launcher_background"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/jgg_name"/> </LinearLayout>
tuijian_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/tuijian_img" android:layout_gravity="center_horizontal" app:placeholderImage="@drawable/ic_launcher_background"/> <TextView android:maxLines="2" android:id="@+id/tuijian_title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tuijian_price" android:textColor="#FF0000" android:layout_marginTop="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
activity_detail.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.my1023.DetailActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" android:orientation="vertical" > <com.youth.banner.Banner android:layout_width="match_parent" android:layout_height="350dp" android:id="@+id/datail_banner" ></com.youth.banner.Banner> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:textColor="#FF0000" android:id="@+id/detail_price"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/detail_title" android:textColor="#363636" android:layout_marginTop="10dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/zxcv"></LinearLayout> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="加入购物车"/> </LinearLayout>
现在是JAVA代码
Api
public interface Api { @GET("home/getHome") Observable<Home> getHome(); //商品详情 @GET("product/getProductDetail") Observable<Detail> getDetail(@Query("pid") String pid); }
MyApi
public class MyApi { public static final String BASE_URL = "http://www.zhaoapi.cn/"; }
Myapp
public class Myapp extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize( this ); } }
RetrofitUtil
public class RetrofitUtil { private final Retrofit retrofit; private HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor( ).setLevel( HttpLoggingInterceptor.Level.BODY ); private RetrofitUtil(){ retrofit = new Retrofit.Builder() .baseUrl( MyApi.BASE_URL ) .addConverterFactory( GsonConverterFactory.create( ) ) .addCallAdapterFactory( RxJava2CallAdapterFactory.create() ) .client( buildOkhttpClinet() ) .build(); } private OkHttpClient buildOkhttpClinet(){ return new OkHttpClient.Builder() .addInterceptor( httpLoggingInterceptor ) .build(); } //暴露外部的方法 public static RetrofitUtil getDefault(){ return SingleHolder._instant; } private static class SingleHolder{ private static final RetrofitUtil _instant = new RetrofitUtil(); } //动态代理创建接口实体类 public <T> T create(Class<T> Clazz){ return retrofit.create( Clazz ); } }
IView
public interface IView { void onSuccrss(Home home); }
DetailView
public interface DetailView { void onDetailSuccess(Detail detail); }
IModel
public class IModel { public Observable<Home> getHome(){ return RetrofitUtil.getDefault().create( Api.class ).getHome(); } public Observable<Detail> getDetail(String pid){ return RetrofitUtil.getDefault().create( Api.class ).getDetail( pid ); } }
IProsenter
public class IProsenter { private IModel iModel; IView miView; public IProsenter(IView iView){ miView = iView; iModel = new IModel(); } public void getHome(){ iModel.getHome() .subscribeOn( Schedulers.io() ) .observeOn( AndroidSchedulers.mainThread() ) .subscribe( new Observer<Home>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Home home) { miView.onSuccrss( home ); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } } ); } }
DetailProsenter
public class DetailProsenter { private IModel model; DetailView mView; public DetailProsenter(DetailView detailView){ mView = detailView; model = new IModel(); } public void getDetail(String pid){ model.getDetail( pid ) .subscribeOn( Schedulers.io() ) .observeOn( AndroidSchedulers.mainThread() ) .subscribe( new Observer<Detail>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Detail detail) { mView.onDetailSuccess( detail ); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } } ); } }
MainActivity
public class MainActivity extends AppCompatActivity implements IView{ @BindView(R.id.index_banner) Banner indexBanner; @BindView(R.id.index_jgg) RecyclerView indexJgg; @BindView(R.id.index_even) TextView indexEven; @BindView(R.id.index_hour) TextView indexHour; @BindView(R.id.index_minute) TextView indexMinute; @BindView(R.id.index_second) TextView indexSecond; @BindView(R.id.index_tuijian) RecyclerView indexTuijian; @BindView(R.id.index_sv) MyScrollView indexSv; @BindView(R.id.mysearch_sao) TextView mysearchSao; @BindView(R.id.mysearch_rl) RelativeLayout mysearchRl; @BindView(R.id.mysearch_info) TextView mysearchInfo; @BindView(R.id.sousuokuang) LinearLayout sousuokuang; private Unbinder unbinder; private IProsenter prosenter; private List<Home.DataBean> data; private CompositeDisposable compositeDisposable = new CompositeDisposable( ); private final int REQUEST_CODE = 200; private List<Home.DataBean.BannerBean> ban; private List<Home.DataBean.FenleiBean> jiugg; private List<Home.DataBean.TuijianBean.ListBeanX> tuijian; private String icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); unbinder = ButterKnife.bind( this ); initData(); sousuokuang.getBackground().setAlpha( 0 ); indexSv.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); sousuokuang.getBackground().setAlpha( i ); }else { sousuokuang.getBackground().setAlpha( 255 ); } } } ); } private void initData() { prosenter = new IProsenter( this ); indexJgg.setLayoutManager( new GridLayoutManager( this,2, LinearLayoutManager.HORIZONTAL,false ) ); indexTuijian.setLayoutManager( new GridLayoutManager( this,2 ) ); //关闭滑动嵌套 indexTuijian.setNestedScrollingEnabled( false ); //固定recycleview的尺寸 indexTuijian.setHasFixedSize( true ); prosenter.getHome(); } private void initBanner(){ List<String> asd = new ArrayList<>( ); for (int i = 0;i<ban.size();i++){ icon = ban.get( i ).getIcon().replace( "https","http" ); asd.add( icon ); } indexBanner.setImages( asd ) .isAutoPlay( true ) .setImageLoader( new MyLoader() ) .start(); } public void onCatagorySuccess(){ JggAdapter adapter = new JggAdapter( jiugg ); indexJgg.setAdapter( adapter ); } @Override protected void onDestroy() { super.onDestroy(); unbinder.unbind(); prosenter = null; } private void initTuijian(){ TuijianAdapter adapter = new TuijianAdapter( tuijian ); indexTuijian.setAdapter( adapter ); } @Override public void onSuccrss(Home home) { ban = home.getData().getBanner(); tuijian = home.getData().getTuijian().getList(); jiugg = home.getData().getFenlei(); onCatagorySuccess( ); initTuijian(); initBanner(); } }
JggAdapter
public class JggAdapter extends RecyclerView.Adapter { private List<Home.DataBean.FenleiBean> list; public JggAdapter(List<Home.DataBean.FenleiBean> list) { this.list = list; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate( parent.getContext(), R.layout.jgg_item,null ); ViewHolder viewHolder = new ViewHolder( view ); return viewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ViewHolder mHolder = (ViewHolder) holder; Home.DataBean.FenleiBean bean = list.get( position ); mHolder.jggImg.setImageURI( Uri.parse( bean.getIcon() ) ); mHolder.jggName.setText( bean.getName() ); } @Override public int getItemCount() { return list.size(); } static class ViewHolder extends RecyclerView.ViewHolder{ @BindView(R.id.jgg_img) SimpleDraweeView jggImg; @BindView(R.id.jgg_name) TextView jggName; ViewHolder(View view) { super(view); ButterKnife.bind(this, view); } } }
TuijianAdapter
public class TuijianAdapter extends RecyclerView.Adapter { private List<Home.DataBean.TuijianBean.ListBeanX> list; private Context context; public TuijianAdapter(List<Home.DataBean.TuijianBean.ListBeanX> list) { this.list = list; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { context = parent.getContext(); View view = View.inflate( context, R.layout.tuijian_item,null ); ViewHolder viewHolder = new ViewHolder( view ); return viewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ViewHolder mHolder = (ViewHolder) holder; final Home.DataBean.TuijianBean.ListBeanX bean = list.get( position ); //处理图片url String imgUrl = getImgUrl(bean.getImages()); mHolder.tuijianImg.setImageURI( Uri.parse(imgUrl)); mHolder.tuijianTitle.setText(bean.getTitle()); mHolder.tuijianPrice.setText("¥" + bean.getPrice()); mHolder.itemView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent( context, DetailActivity.class ); intent.putExtra( "pid",bean.getPid()+"" ); context.startActivity( intent ); } } ); } private String getImgUrl(String images) { String[] split = images.split("\\|"); return split[0]; } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tuijian_img) SimpleDraweeView tuijianImg; @BindView(R.id.tuijian_title) TextView tuijianTitle; @BindView(R.id.tuijian_price) TextView tuijianPrice; ViewHolder(View view) { super(view); ButterKnife.bind(this, view); } } }
DetailActivity
public class DetailActivity extends AppCompatActivity implements DetailView{ @BindView(R.id.datail_banner) Banner datailBanner; @BindView(R.id.detail_price) TextView detailPrice; @BindView(R.id.detail_title) TextView detailTitle; private Detail.DataBean data; private String pid; private DetailProsenter prosenter; Unbinder unbinder; private List<String> path; private String images; private String[] split; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_detail ); unbinder = ButterKnife.bind( this ); initData(); } private void initData() { prosenter = new DetailProsenter( this ); pid = getIntent().getStringExtra( "pid" ); prosenter.getDetail( pid ); } @Override public void onDetailSuccess(Detail detail) { data = detail.getData(); path = new ArrayList<>( ); images = data.getImages(); split = images.split( "\\|" ); for (int i = 0;i<split.length;i++){ path.add( split[i] ); } datailBanner.setImages( path ) .isAutoPlay( true ) .setImageLoader( new MyLoader() ) .start(); detailTitle.setText( data.getTitle() ); detailPrice.setText("¥"+data.getBargainPrice() ); } }