仿探探:网络请求数据将卡片进行左滑右滑
来源:互联网 发布:免费企业域名邮箱 编辑:程序博客网 时间:2024/06/15 13:46
MVP+Retrofit+RxJava进行网络数据的请求,Fresco进行图片的显示实现探探的左滑右滑效果。
先看一下效果
再看一下依赖
implementation project(':library')//关联一个 library compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.squareup.okhttp3:okhttp:3.1.2' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.google.code.gson:gson:2.6.2' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.okhttp3:okhttp:3.1.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' //若和观察者结合的话,需加上如下依赖: compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'
下面进入代码部分
先是布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#cd4827"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="探索" android:textColor="#fff" android:textSize="17sp" /> <ImageView android:id="@+id/notify_change" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="right|center_vertical" android:padding="16dp" android:src="@drawable/download" /> </FrameLayout> <com.stone.card.library.CardSlidePanel android:id="@+id/image_slide_panel" android:layout_width="600dp" android:layout_height="800dp" card:bottomMarginTop="38dp" card:itemMarginTop="10dp" card:yOffsetStep="13dp" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/card_item_content" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:paddingLeft="5dp" android:paddingRight="5dp" tools:context=".MainActivity"> <RelativeLayout android:id="@+id/card_top_layout" android:layout_marginTop="150dp" android:layout_width="400dp" android:layout_height="400dp" android:background="@drawable/top"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/card_image_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" /> <View android:id="@+id/maskView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?android:attr/selectableItemBackground" android:clickable="true" /> <TextView android:id="@+id/card_pic_num" android:layout_width="wrap_content" android:layout_height="20dp" android:layout_margin="5dp" android:background="#5f000000" android:drawableLeft="@drawable/card_photot" android:drawablePadding="4dp" android:gravity="center" android:paddingLeft="6dp" android:paddingRight="4dp" android:text="6" android:textColor="#fff" /> </RelativeLayout> <RelativeLayout android:id="@+id/card_bottom_layout" android:layout_width="400dp" android:layout_height="wrap_content" android:background="@drawable/bottom" android:paddingTop="10dp"> <TextView android:id="@+id/card_user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="叶琪琪 23" android:textColor="#111" android:textSize="18sp" /> <TextView android:id="@+id/card_other_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/card_user_name" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:paddingBottom="16dp" android:text="其它 6km4" android:textColor="#888" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginTop="3dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/card_left1" android:drawablePadding="2dp" android:gravity="center_horizontal" android:text="0" android:textColor="#999" android:textSize="15sp" /> <TextView android:id="@+id/card_like" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="10dp" android:drawableLeft="@drawable/card_left2" android:drawablePadding="2dp" android:gravity="center_horizontal" android:text="2" android:textColor="#999" android:textSize="15sp" /> </LinearLayout> </RelativeLayout></LinearLayout>
下面是请求数据的模块
public interface IGetRequest { @GET("top250") Observable<Bean> getMovie(@Query("start") int start, @Query("count") int count);}
MODEL层
public interface IGetModel { public void getData(int start, int count, Observer observer);}
public class GetModel implements IGetModel { @Override public void getData(int start, int count, Observer observer) { Retrofit retrofit=new Retrofit.Builder() .baseUrl("https://api.douban.com/v2/movie/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); IGetRequest result=retrofit.create(IGetRequest.class); result.getMovie(start,count) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); }
View层
public interface IshowView { public void showData(List<Bean.SubjectsBean> list); public int getStart(); public int getCount();}
Presenter层
public class DataPresenter { IshowView view; GetModel model; List<Bean.SubjectsBean> list=new ArrayList<>(); public DataPresenter(IshowView view) { this.view = view; model=new GetModel(); } public void dpGetData(){ int start=view.getStart(); int count=view.getCount(); model.getData(start,count,new Observer<Bean>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.i("111111","onNext"); } @Override public void onNext(Bean bean) { list.addAll(bean.getSubjects()); view.showData(list); Log.i("111111","onNext"+list); } }); }}
下面是适配器
public class MyAdapter extends CardAdapter { Context context; List<Bean.SubjectsBean> list=new ArrayList<>(); public MyAdapter(Context context, List<Bean.SubjectsBean> list) { this.context = context; this.list = list; } @Override public int getLayoutId() { return R.layout.card_item; } @Override public int getCount() { return list.size(); } @Override public void bindView(View view, int index) { Object tag = view.getTag(); ViewHolder viewHolder; if (null != tag) { viewHolder = (ViewHolder) tag; } else { viewHolder = new ViewHolder(view); view.setTag(viewHolder); } viewHolder.bindData(index,list); } @Override public Object getItem(int index) { return list.get(index); } @Override public Rect obtainDraggableArea(View view) { // 可滑动区域定制,该函数只会调用一次 View contentView = view.findViewById(R.id.card_item_content); View topLayout = view.findViewById(R.id.card_top_layout); View bottomLayout = view.findViewById(R.id.card_bottom_layout); int left = view.getLeft() + contentView.getPaddingLeft() + topLayout.getPaddingLeft(); int right = view.getRight() - contentView.getPaddingRight() - topLayout.getPaddingRight(); int top = view.getTop() + contentView.getPaddingTop() + topLayout.getPaddingTop(); int bottom = view.getBottom() - contentView.getPaddingBottom() - bottomLayout.getPaddingBottom(); return new Rect(left, top, right, bottom); } class ViewHolder { SimpleDraweeView imageView; View maskView; TextView userNameTv; TextView imageNumTv; TextView likeNumTv; public ViewHolder(View view) { imageView = (SimpleDraweeView) view.findViewById(R.id.card_image_view); maskView = view.findViewById(R.id.maskView); userNameTv = (TextView) view.findViewById(R.id.card_user_name); imageNumTv = (TextView) view.findViewById(R.id.card_pic_num); likeNumTv = (TextView) view.findViewById(R.id.card_like); } public void bindData(int index,List<Bean.SubjectsBean> list) { imageView.setImageURI(list.get(index).getImages().getLarge()); userNameTv.setText(list.get(index).getTitle()); imageNumTv.setText(list.get(index).getId()); likeNumTv.setText(list.get(index).getYear()); } }}
最后是MainActivity中
public class MainActivity extends FragmentActivity implements IshowView{ CardSlidePanel.CardSwitchListener cardSwitchListener; List<Bean.SubjectsBean> list; int start = 0; int count = 30; CardSlidePanel slidePanel; DataPresenter presenter; MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); list = new ArrayList<>(); initView(); presenter = new DataPresenter(this); presenter.dpGetData(); findViewById(R.id.notify_change).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { slidePanel.getAdapter().notifyDataSetChanged(); } }); } @Override public void showData(List<Bean.SubjectsBean> list) { adapter = new MyAdapter(this, list); slidePanel.setAdapter(adapter); } @Override public int getStart() { return start; } @Override public int getCount() { return count; } private void initView() { slidePanel = (CardSlidePanel) findViewById(R.id.image_slide_panel); // 1. 左右滑动监听 cardSwitchListener = new CardSlidePanel.CardSwitchListener() { @Override public void onShow(int index) { } @Override public void onCardVanish(int index, int type) { } }; slidePanel.setCardSwitchListener(cardSwitchListener); }}
阅读全文
0 0
- 仿探探:网络请求数据将卡片进行左滑右滑
- xUtils进行网络请求数据
- 将token添加到请求头中进行网络请求
- 根据网络判断进行数据请求展示
- 使用POST请求网络数据,进行账号的…
- 通过httpUtils请求网络xml数据进行解析
- ListView通过Volley进行网络数据的请求更新
- Volley框架进行请求网络数据的使用
- RxVolley进行网络请求(get方式),获取json数据
- Android okhttp3来进行网络数据请求和发送
- retrofit请求网络数据 将代码封装到工具包中
- HTTPS进行网络请求
- Retrofit进行网络请求
- 利用ASIHttpRequest框架进行网络数据请求(一)—— 利用get请求数据
- objective-c - 基础篇 - 数据库网络 -- 使用NSURLSession进行POST请求的网络数据
- 网络数据请求
- qml 请求网络数据
- 网络请求数据解析
- js基本概念(上)之数据类型
- 微信小程序做商城是否有前景?
- Oracle 11g RAC查看ASM日志、grid日志和DB日志
- Vue 路由 vue-router
- java基础之向上造型与多态
- 仿探探:网络请求数据将卡片进行左滑右滑
- 快速排序,找中位
- Spring framework(6):SpEL 表达式
- MYSQL5.7 开启远程访问
- 是AI就躲个飞机-纯Python实现人工智能
- 阿里巴巴与星巴克合作 AR场景识别首次大规模商用
- html--标签
- c++ primer 13.3节练习(定义自己版本的swap函数并排序)
- Centos不能解析域名