Android回弹阻尼效果的简单实现,非基于ListView,ScrollView.

发表于: 乘月网 · 2016-12-23 ·  532 阅读  ·  0 评论 

好久没有写Android博客了,这段时间有点浮躁,静不下心来写。趁今天周五心情好点,写个简单点的技术实现。

先简单说说回弹阻尼效果的思路,先自定义一个ViewGroup ----- ReboundEffectsView,通过手势的上下滑动距离差不断改变其子View(一般都是子ViewGroup)的相对于该ReboundEffectsView的位置(坐标),当手势为释放(action_up)或取消(action_cancel)时,重置子View最初始相对ReboundEffectsView的位置,最初始的位置值应在处理滑动事件前保存下来以用来重置。


 Demo项目下载地址:https://github.com/ausboyue/ReboundEffects

 

进入代码板块:

在自定义ReboundEffectsView中重写onFinishInflate方法,XML布局完成加载后获取其第一个子View(使用该ReboundEffectsView时应保证其只有且只有一个子View,唯一的独生子,我就叫它太子View):

onTouchEvent方法,分别对ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL事件进行处理:

onActionDown中保存子View的初始上下高度位置:

 

核心代码,onActionMove中,主要是判断手势移动事件是否为上下滑动事件,是的话根据上下滑动的绝对距离重绘子View的位置(这里的绝对距离除以3了,目的是放缓子View的移动速度),并在以后的Touch拿到直接的控制权,返回true。

 

手指释放或手势取消时,则调用onActionUp方法恢复子View的位置:

 

 

OK,整个自定义View中重写原生的方法并不多,也不需要自行测量和绘制View,代码逻辑也足够精简,如果有什么bug或建议可以在下面评论,我会继续更新博客。