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的更多相关文章

  1. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  2. Android 学习资源

    下面这些资源对Android开发来说是很有帮助的! 最常用的: Android开发官方网站:http://developer.android.com/index.html 这个网站应该是Android ...

  3. Android学习资料收集

    1.Android 学习之路 http://stormzhang.com/android/2014/07/07/learn-android-from-rookie/

  4. Android学习——第一个NDK程序

    在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了.可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用, ...

  5. Android学习——windows下搭建Cygwin环境

    在上一篇博文<Android学习——windows下搭建NDK_r9环境>中,我们详细的讲解了在windows下进行Android NDK开发环境的配置,我们也讲到了在NDk r7以后,我 ...

  6. Android学习——windows下搭建NDK_r9环境

    1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个 ...

  7. Android学习第三天-打包常用命令

    在前面<Android学习第一天-adb常用命令>和 <Android学习第二天-android常用命令>两篇博文中,我们重点讲解了adb和android的常用命令,下面我们讲 ...

  8. 【Android学习】《Android开发视频教程》第一季笔记

    视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时5    Activity基础概念 1.Android开发技术结构 ...

  9. Android 学习资料收集

    收集整理这份资料灵感来自于 trip_to_iOS, 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, ...

随机推荐

  1. Kbuild、Kconfig、make menuconfig、.config、Makefile之间的关系

    今天突发奇想,想在这里分享下比喻分析Kbuild ---->去饭店吃饭的过程.   1.Kconfig --->饭店的菜单 2.条件编译选项--->菜单中的每一盘菜,可以选择这个菜的 ...

  2. CF796D Police Stations 思维

    Inzane finally found Zane with a lot of money to spare, so they together decided to establish a coun ...

  3. PAT天梯赛 L1-050 倒数第N个字符串

    题目链接:点击打开链接 给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增.例如当 L 为 3 时,序列为 { aaa, ...

  4. 去除掉svn目录

    使用svn提交时,造成有些文件锁住不能使用,百度得到下面相似问题以及解决方法: /*********************************************************** ...

  5. POJ1113 Wall

    题目来源:http://poj.org/problem?id=1113题目大意: 如图所示,给定N个顶点构成的一个多边形和一个距离值L.建立一个围墙,把这个多边形完全包含在内,且围墙距离多边形任一点的 ...

  6. SoapUI性能测试

    之前没发现SoapUI可以做性能测试,自己写了两个简单的例子,体验一下它的测试功能. 一.使用控件顺序执行 测试的框架如上图所示,一个TestCase包含Test Steps(具体的测试步骤),Loa ...

  7. c++从txt中读取数据,数据并不是一行路径(实用)

    #include <iostream>#include <fstream>#include <string> using namespace std; //输出空行 ...

  8. 8-----BBS论坛

    BBS论坛(八) 8.1.发送邮箱验证码功能 (1)cms/resetemail.html {% from 'common/_macros.html' import static %} {% bloc ...

  9. jmeter使用总结

    1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具.用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域 ...

  10. spring AOP注解

    此段小代码演示了spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑.@After 是在所拦截方法执行之后执行一段逻辑.@A ...