ViewDragHelper详解

目前抽屉式的Android应用还是比较多的,而且给人眼前一亮的感觉,其中“腾讯QQ”的拖拽效果的抽屉式样式就是一个很好的例子。通过查看他人源码发现,里面用到了ViewDragHelper和Gesturedetector.ViewDragHelper是framework中不为人知却非常有用的一个工具。

在2013年谷歌i/o大会上介绍了两个新的layout:SlidingPaneLayout和DrawerLayout,源码中都运用了ViewDragHelper来处理拖动。
现在,来先介绍一下ViewDragHelper的基本用法,然后介绍一下例子练练手就可以了。

处理手势识别的类有ViewDragHelper和Gesturedetector,但是,处理拖动方面,Gesturedetector手势类只能说勉为其难:Gesturedetector主要处理识别双击等手势

关于ViewDragHelper有如下几点:
1、涉及到一个回调类ViewDragHelper.Callback:是连接ViewDragHelper与view之间的桥梁(这个view一般是指拥有子view的容器即parentView,一般这个parentView是布局类型ViewGroup);

2、ViewDragHelper是通过其静态方法create创建出来的。
/*
这里创建出ViewDragHelper对象,其中阐述‘this’是ViewGroup,代表其依靠的父容器
‘1f’代表敏感度,0-1直接取值,值越大越敏感。
*/
ViewDragHelper mViewDragHelper = ViewDragHelper.create(this, 1f, new ViewDragCallBack());

3、你能够指定拖动的方向,并且ViewDragHelper可以检测是否触及边缘,相比自己去出来onTouchEvent()方法来处理边缘,实在是简单多了。

4、 ViewDragHelper不直接作用于被拖动的View,而是通过viewDragHelper的回调类去控制子view是否可以被拖动。所以拖动行为必须在其回调方法Callback中去想办法。

5、ViewDragHelper的本质其实是分析onInterceptTouchEvent和onTouchEvent的MotionEvent参数,然后根据分析的结果去改变一个容器中被拖动子View的位置( 通过offsetTopAndBottom(int offset)和offsetLeftAndRight(int offset)方法 ),他能在触摸的时候判断当前拖动的是哪个子View;

6、ViewDragHelper的实例方法 ViewDragHelper create(ViewGroup forParent, Callback cb) 可以指定一个被ViewDragHelper处理拖动事件的对象 ,但ViewDragHelper类的设计决定了其适用于被包含在一个自定义ViewGroup之中,而不是对任意一个布局上的视图容器使用ViewDragHelper。(个人观点,ViewDragHelper就是用来自定义布局控件,使用这个自定义控件可以拖动其中的子View实现想要的动画效果)

推荐个人写的Demo,通过源码学习。ViewDrageHelperDemo,仍在完善中。

博客首次发表于:xuqingsong.farbox.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值