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. 文件上传之Ajax篇

    AJAX上传文件 1.为什么要写这篇文章  楼主前几天去北京面试,聊起ajax上传文件, 面试官告之不能,遂讨论之,不得果,于是写下这篇文章,希望能和大家一起学习 2.正文 首先,要使用ajax上传文 ...

  2. 传球游戏 dp

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:nnn个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每 ...

  3. [TJOI2013]松鼠聚会 BZOJ 3170

    题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...

  4. shell操作字符串案例

    #!/bin/bash name="Shell" url="http://cxy.com/" str1=$name$url #中间不能有空格 str2=&quo ...

  5. CSS(九)元素隐藏和利弊

    隐藏元素.无法点击,这之间有什么关系呢? 可以配合我写的 html 食用:https://github.com/dirstart/ScriptOJ/blob/master/OJ_CSS/4.css%E ...

  6. HDU5950 Recursive sequence 非线性递推式 矩阵快速幂

    题目传送门 题目描述:给出一个数列的第一项和第二项,计算第n项. 递推式是 f(n)=f(n-1)+2*f(n-2)+n^4. 由于n很大,所以肯定是矩阵快速幂的题目,但是矩阵快速幂只能解决线性的问题 ...

  7. 互联网开发-web文件上传性能问题

    1. 问题描述 文件大小 部署环境 平均上传速度 5M 外网 28s-36s 5M 公司局域内网 秒传,很快 2. 问题分析 在网上搜索“测速网”测试了一下公司外网的带宽情况: 上传带宽 = 1.04 ...

  8. Impala与Hive的优缺点和异同

    定位: HIVE:长时间的批处理查询分析 impala:实时交互式SQL查询 impala优缺点优点: 1. 生成执行计划树,不用多次启动job造成多余开销,并且减少中间结果数据写入磁盘,执行速度快 ...

  9. 10-----BBS论坛

    BBS论坛(十) 10.1.客户端权限验证功能完成 (1)cms/cms_profile 显示当前用户的角色和权限 <tr> <td>角色:</td> <td ...

  10. java——如何通过class调用该类的方法并获得返回值?(反射)

    demo: public class T{ public static void main(String[] args) throws Exception{ //获得Person的Class对象 Cl ...