先记录一下知识点,有时间整理下主页原型
一:卡片层叠布局
该作者的玩转recyclerview系列文章可以作为RecyclerView的资料进行学习。
实现方法:
利用
LayoutManager
加载显示屏幕上
可见的数量的View
,搭配
ItemTouchHelper
处理拖拽&滑动删除逻辑,核心代码不超过50行。且经过封装,四行代码就可以用。
记住
LayoutManager
,我们写,只layout出界面上可能会看见的那些View即可。
关于
ItemTouchHelper
,它本身实现了拖拽&滑动删除逻辑,我们只需要在
onChildDraw()
中绘制动画和
onSwiped()
中处理数据集(循环or删除)即可。
,你只需要:
- 1
- 2
- 3
- 4
- 5
如果需要定制特殊的参数,例如显示6层:
具体实现大致分析:
LayoutManager的实现卡片层叠
LayoutManager
十分简单,因为
ItemTouchHelper
的存在,
LayoutManager
根本不需要处理它的滑动事件,而
LayoutManager
中最难写的就是在滑动时的
View
回收和复用,以及
layout
新
View
的处理。
为了实现层叠效果,需要处理
- 界面最多显示几个View
- 每一级View之间的Scale差异、translationY等等
ItemTouchHelper实现炫动滑动:
滑动删除
我们本例中,需要的是滑动消失(删除) ,所以我们的Callback不需要关注onMove()方法。
且我们需要上下左右滑动都可以删除的效果。
为了循环:
- 利用当前被删除的View的ViewHolder拿到Position
- 删除数据集中对应Position的数据源
- 同时将该数据源插入数据集中的首位。
- 调用notifyDataSetChanged(),通知列表刷新
如此我们便完成了,循环列表的需求。
滑动时动画
我们需要重写
Callback
的
onChildDraw()
方法,
参考的文章:
五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:LayoutManager+ItemTouchHelper
【Android】掌握自定义LayoutManager(一) 系列开篇 常见误区、问题、注意事项,常用API。
【Android】掌握自定义LayoutManager(二) 实现流式布局
深入浅出 RecyclerView
协调布局
behavior:行为
另外还需要知道的是,
Behavior
是Col.LayoutParams的成员变量,那么也就是说只有当你的
Behavior
设置给Col的
直接子View
才会有效果,这点要记住,不然徒劳无功。(Col的子View的子View就不要给它设置Behavior啦,没效果的)
- child,the child view associated with this Behavior
它是一个View,是该Behavior的关联对象,也即Behavior所要操作的对象 - dependency,也是个View,是child的依赖对象,同时也是Behavior对child进行操作的根据
通过分析源码,可以知道,Col在关键的方法里把处理权优先交给了Behavior,所以才让Behavior拥有了拦截一切的能力,所以,原来是Col放任了Behavior!!~
CoordinatorLayout使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果。CoordinatorLayout通过设置子View的 Behaviors来调度子View。系统(Support V7)提供了AppBarLayout.Behavior, AppBarLayout.ScrollingViewBehavior, FloatingActionButton.Behavior, SwipeDismissBehavior<V extends View> 等。
CoordinatorLayout作为“super-powered FrameLayout”基本实现两个功能:
1、作为顶层布局
2、调度协调子布局
三:其他
关于ViewPager高度自适应(随着pager页的高度改变Viewpager的高度)
ViewPager的高度根据item的高度自适应
嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment.
CardView
创建全屏移动的view
如何将一个View移到最顶层
复制一个view