ViewDragHelper通常是在一个ViewGroup内部使用。使用步骤如下:
1.初始化ViewDragHelper:在一个自定义的ViewGroup里面(暂且命名为TestViewGroup),通过ViewDragHelper静态工厂方法初始化。

ViewDragHelper viewDragHelper = ViewDragHelper.create(TestViewGroup.this,callback);

这里需要一个ViewDragHelper.Callback

private ViewDragHelper.Callback callback = new ViewDragHelper.Callback() {    //何时开始检测触摸事件    @Override    public boolean tryCaptureView(@NonNull View child, int pointerId) {        //这里可以设置一个条件,返回该条件的结果        //当该条件结果为true时,开始检测触摸事件        return true;    }    //处理水平滑动    @Override    public int clampViewPositionHorizontal(@NonNull View child, int left, int dx) {        return left;    }    //处理垂直滑动    @Override    public int clampViewPositionVertical(@NonNull View child, int top, int dy) {        return top;    }    //拖动结束手指释放后    @Override    public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) {        super.onViewReleased(releasedChild, xvel, yvel);        //这里进行的是让view返回原点的操作        mViewDragHelper.smoothSlideViewTo(mChildView, 0, 0);        ViewCompat.postInvalidateOnAnimation(TestViewGroup.this);    }};

2.重写事件拦截方法,将事件传递给ViewDragHelper处理。代码如下:

@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {    return mViewDragHelper.shouldInterceptTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent event) {    //这里必须将触摸事件传递给ViewDragHelper    mViewDragHelper.processTouchEvent(event);    return true;}

3.处理computeScroll(),代码模板如下:

@Overridepublic void computeScroll() {    super.computeScroll();    if (mViewDragHelper.continueSettling(true)) {        ViewCompat.postInvalidateOnAnimation(TestViewGroup.this);    }}

4.处理1中callback中对应的方法。详见1中注解
5.获取一下子view以对其进行操作

@Overrideprotected void onFinishInflate() {    super.onFinishInflate();    mChildView = getChildAt(0);}

6.相关xml布局

    

更多相关文章

  1. 分支和循环(二)(零基础学习C语言)
  2. android之退出应用程序
  3. weex和Android的交互
  4. Android动画点击不运行
  5. android 保存 用户名和密码 设置等应用信息优化
  6. 【Dialer】自定义暗码进入测试模式
  7. Android(安卓)-- 基础
  8. Android监听UEvent事件log应用程序
  9. Android(安卓)四大组件 - 进程的 fork 创建过程

随机推荐

  1. 如何使用MySql和PHP存储/处理多个表的数
  2. 使用cmake安装mysql5.5.13
  3. Linux测试环境搭建apache+mysql+php
  4. 如何使用本地phmyadmin客户端访问远程服
  5. Failed while installing Dynamic Web Mo
  6. MySQLDriverCS Exception: MySQLDriverCS
  7. Mysql字符集和校验规则
  8. PHP读取Excel文件的内容并写入Mysql数据
  9. 有多少MySQL行太多?
  10. PHP新的连接MySQL方法mysqli