首页 > 代码库 > android 学习之ViewDragHelper
android 学习之ViewDragHelper
ViewDragHelper是用来移动ViewGroup中子View的,之前写View的移动都是通过scrollTo来实现,但是它移动的是VIew中的内容,ViewGroup中的所有的子View都会移动,我一直在找能够移动子View的方法。在Google的IO大会上,发布的DrawerLayout和SlidingPaneLayout,其内部实现都是使用的ViewDragHelper实现的。
首先使用方法:
1.ViewDragHelper不能被new出来,是通过
private void init(Context context){
mDragHelper = ViewDragHelper.create(this, 0.2f, new DragHelperCallback());
}
创建出来的。
2.在ViewGroup中的打断触摸事件的方法中:由ViewDragHelper自己来判断是否去打断触摸事件。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP) {
mDragHelper.cancel();
return false;
}
return mDragHelper.shouldInterceptTouchEvent(ev);
} 3. 在ViewGroup的触摸事件中:
@Override
public boolean onTouchEvent(MotionEvent ev) {
mDragHelper.processTouchEvent(ev);
return true;
}4.整个手势的识别通过ViewDragHelper自己完成,然后自己回调自己的接口,通过接口来完成相应的动作:
class DragHelperCallback extends Callback{
@Override
public boolean tryCaptureView(View arg0, int arg1) {
System.out.println("positionID=="+arg1);
return arg0 == getTopView();
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx) {
final int leftBound = getPaddingLeft();
final int rightBound = getWidth() - getTopView().getWidth();
final int newLeft = Math.min(Math.max(left, leftBound), rightBound);
return newLeft;
}
@Override
public int clampViewPositionVertical(View child, int top, int dy) {
final int topBound = getPaddingTop();
final int bottomBound = getHeight() - getTopView().getHeight();
final int newTop = Math.min(Math.max(top, topBound), bottomBound);
return newTop;
}
private View getTopView(){
return getChildAt(1);
}
private View getBottomView(){
return getChildAt(0);
} 这里处理的是左右滑动的事件。
简单的使用就是这样的。先上一下Demo的效果图:
ViewDragHelper封装了手势,大大的简化了很多的手势处理。
我参照别人的博客和Demo,自己实现了相同的效果,在下一篇博客中,放出源码。边学边练。
我的github地址:https://github.com/flyme2012
我的博客地址:http://www.cnblogs.com/flyme2012/
android 学习之ViewDragHelper
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。