项目作者: RainMtime

项目描述 :
一个可以拖拽滑动切换的卡片样式View
高级语言: Java
项目地址: git://github.com/RainMtime/SwitchCardView.git
创建时间: 2018-01-19T05:35:19Z
项目社区:https://github.com/RainMtime/SwitchCardView

开源协议:MIT License

下载


SwitchCardView

概述

这是一个滑动切换卡片样式的View,可以用手指进行卡片的拖拽,当滑动距离小于一定的距离,卡片会自动回到卡片位置。

特点如下

  • 卡片可以可循环展示
  • 卡片可以嵌套在任何滑动组件中,如ListView,RecyclerView中,无需额外的滑动事件拦截处理
  • 卡片支持,小范围距离滑动,回归到卡片原始位置,并不进行数据切换
  • Adapter设计风格,View样式,数据源自定义设置即可。
  • 卡片从始至终只使用2个view(会复用)

效果图如下:

compress

ps:录屏工具原因,会显得比较模糊

compress3

使用方法:

  1. buildscript {
  2. repositories {
  3. jcenter()
  4. }
  5. }
  6. dependencies {
  7. compile 'com.rainmtime.androidtools:switchcardview:1.0.0'
  8. }

在xml中:

  1. <rainmtime.com.switchcardview.SwitchCardView xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:id="@+id/switch_cardview"
  3. android:layout_width="match_parent"
  4. android:layout_height="100dp">
  5. </rainmtime.com.switchcardview.SwitchCardView>

给这个SwitchCardView设置SwitchCardView.adapter

  1. //跟ListView的Adapter 使用方法同样效果
  2. mSwitchCardView.setAdapter(new SwitchCardView.Adapter() {
  3. @NonNull
  4. @Override
  5. public View createTopCardView(@NonNull ViewGroup parent) {
  6. return null;
  7. }
  8. @NonNull
  9. @Override
  10. public View createBottomCardView(@NonNull ViewGroup parent) {
  11. return null;
  12. }
  13. @Override
  14. public int getItemCount() {
  15. return 0;
  16. }
  17. @Override
  18. public void renderView(int position, View view) {
  19. }
  20. });

PS:具体实现,可以参考本项目的Demo即可。

实现思路

  • 其实这个SwitchCardView,会有2个子View(一上一下),就是Adapter中createTopCardView()和createBottomCardView()返回的view,要2个view的目的,是数据预加载(2个),这样做动画的时候,衔接的比较好。

  • 手指滑动的过程中,其实只是一张假的bitmap。

  • 数据切换逻辑就是,当第一张卡片的假身(bitmap)划走以后,把以前bottomView展示的数据,让TopView展示,拿第3个数据,让bottomView数据展示。这样就顺利的切换了数据(用户以为是卡片换,其实是数据,错位上移而已)

Demo参考

这个项目有个app的module,里面有个简单的实例(就是第一张效果图的示例)