安卓View开发心得(四)

3.分发/消费MotionEvent
实现复杂的手势控制时,往往需要借助MotionEvent。譬如各种下拉、上拉刷新,左右滑动切换页面或者关闭页面等等。分发/消费MotionEvent的主要接口有两个:View.onTouchEvent()和ViewGroup.onInterceptTouchEvent()。
(1)分发/拦截MotionEvent。MotionEvent的传递是从根节点View开始,从parent child,一层层传给child view,直到叶子view。在此过程中,任何一层View如果重写了ViewGroup.onInterceptTouchEvent()返回true,则会告知系统,在此层拦截MotionEvent,此层以下的child view将无法收到MotionEvent;返回false则会继续向下传递。可见,对于分发/拦截MotionEvent而言,越接近根节点View,优先级越高。
(2)消费MotionEvent。这个过程与(1)相反,从叶子View向上,一层层传给根节点View。在此过程中,任何一层View如果重写了View.onTouchEvent()返回true,这次的MotionEvent将会被消费,此层以上的parent view将无机会消费此MotionEvent;如果返回false,则继续向上传递。可见,对于消费MotionEvent而言,越接近叶节点View,优先级越高。
所以,需要根据UI业务需求,来判断对于Touch事件的处理是parent view为主导,在某些特定的逻辑下面交于child view处理;还是以child view处理为主,某些特定的逻辑下面交于parent child处理。如果是前者,则以利用ViewGroup.onInterceptTouchEvent()为主,后者以利用View.onTouchEvent()为主。

4.借助开源
安卓app经过这么多年的发展,已经有大量的各种各样的开源库出现,app开发也从最初的“事必躬亲”,最多借鉴一下android源码中的系统app,发展到了大量使用开源项目搭建的阶段,从这个角度上看app的开发越来越像服务器了。面对比较难搞的UI需求,找找开源是个不错的想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值