ViewDragHelper 使用

ViewDragHelper 是谷歌2013年i/o大会上提出的,统一了view 的拖动处理,ViewDragHelper。

 

使用ViewDragHelper场景:

一般是view需要滑动拖拽,比如slidingmenu, listview item左右滑动效果等等。写在自定义的view中。

使用ViewDragHelper 步骤:

1,创建ViewDragHelper

ViewDragHelper create(ViewGroup forParent, Callback cb)

 ViewDragHelper create(ViewGroup forParent, float sensitivity, Callback cb)
View Code

 

2,重写view  onInterceptTouchEvent

    public boolean onInterceptTouchEvent(MotionEvent ev) { return viewDragHelper.shouldInterceptTouchEvent(ev); } 

3,重写view onTouchEvent

  public boolean onTouchEvent(MotionEvent event) {
        viewDragHelper.processTouchEvent(event);
        return true;
    }

 

4, 若需要动画 重写view  computeScroll

 if (viewDragHelper.continueSettling(true)) {
            invalidate();
        }

 

ViewDragHelper 重要方法:

tryCaptureView                 捕获view 判断哪些view响应一系列事件

onViewCaptured                         捕获到view时回调

clampViewPositionHorizontal       view可移动的横向边界控制

clampViewPositionVertical           view可移动的纵向边界控制

onViewReleased                         手指释放时调用此方法

onEdgeDragStarted                    边界拖动时调用

getViewHorizontalDragRange       横向可拖动的范围  当子view可以抢到焦点时,导致不能拖动时,需要重写此方法。

getViewVerticalDragRange            同上

onViewDragStateChanged            状态发生变化时回调

onViewPositionChanged                当拖动view的位置发生改变时回调

onEdgeTouched                           触摸到边界时回调

 

 

转载于:https://www.cnblogs.com/lihaolihao/p/4745297.html

ViewDragHelper是一个帮助我们实现View拖拽和滑动效果的工具类,使用它可以简单地实现一些常见的交互效果,例如拖拽、滑动、边缘拖拽等。以下是使用ViewDragHelper的一般步骤: 1. 创建ViewDragHelper对象 ``` ViewDragHelper mDragHelper = ViewDragHelper.create(parentView, 1.0f, new DragHelperCallback()); ``` 2. 编写DragHelperCallback类 ``` private class DragHelperCallback extends ViewDragHelper.Callback { // 重写tryCaptureView方法,判断是否捕获当前View @Override public boolean tryCaptureView(View child, int pointerId) { return true; } // 重写clampViewPositionHorizontal和clampViewPositionVertical方法,返回拖拽后View的位置 @Override public int clampViewPositionHorizontal(View child, int left, int dx) { final int leftBound = getPaddingLeft(); final int rightBound = getWidth() - child.getWidth() - leftBound; 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() - child.getHeight() - topBound; final int newTop = Math.min(Math.max(top, topBound), bottomBound); return newTop; } } ``` 3. 在View的onTouchEvent中处理事件 ``` @Override public boolean onTouchEvent(MotionEvent event) { mDragHelper.processTouchEvent(event); return true; } ``` 4. 在View的onDraw方法中绘制View ``` @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制View } ``` 以上是使用ViewDragHelper的一般步骤,具体使用还需要根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值