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/

时间: 2024-10-10 10:40:27

android 学习之ViewDragHelper的相关文章

Android学习之导航--摘自黑马程序员

Android学习路线参考: 第三阶段:Android核心基础 什么是3G/4G.3G/4G网络的特点,掌握Android编程的基本概念与要点,Android SDK及其开发环境搭建.Android项目结构分析.Android应用设计模式.文件系统.文件形式的数据存储与访问.SDCard卡读写.使用SAX/DOM/PULL解析XML.SharedPreferences.Intent.IntentFilter.Android四大核心组件(Activity.BroadcastReceiver.Ser

Android 学习资料分享(2015 版)

我是如何自学Android,资料分享(2015 版) Tikitoo2015.02.11 10:21 1713 字 3932 次阅读 自己学了两三个月的Android,最近花了一周左右的时间写了个App--Diigoer(已开源),又花了一两周时间找工作,收到了两个Offer,也算是对自己学习的一种认可吧:我刚开始学习总结的--<我是如何自学Android,资料分享>,如果是初学Android 的话,不应该错过的,而今天这篇分享好这篇文章,相对于第一次写的会有所提升,所以建议先把上一篇看了,再

android学习路线:如何成长为高级工程师

博主参加了2014 CSDN博客之星评选,帮我投一票吧.点击给我投票前言之所以写这篇文章,是因为最近博客和我的开发群( 215680213 )中,不少小伙伴都让我讲讲android学习路线,所以我决定写一篇博客,来说明这个问题.既然有不少小伙伴来咨询这个问题,说明大家都还是想快速地提高技术,毕竟技术的提高是职业发展中不可或缺的一步,技术好了,才能得到认可,才能升职加薪.一般来说,快速提高技术是不太容易的,但是通过正确的方法加上辛勤的汗水是可以缩短这个过程的.或许有人会问,你凭什么来写这个学习路线

Android学习系列(17)--App列表之圆角ListView(续)

http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)--App列表之圆角ListView中的,但是若是如此就让大家错过一篇新的好的文章,着实可惜.上篇中我们使用shape,corners,gradient实现了一个渐变的圆角效果,但是在完文之后的实践中,我发现有时效果不甚满意,选中和放手的事件监听没有去正确的判断,然后渐变效果也比较单一,性能也觉得不是很快

Android学习笔记——关于onConfigurationChanged

从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性: android:configChanges="orientation|keyboard|keyboardHidden" 通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChan

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样

问题:android学习内容破碎,我个人关于如何学习android的一些个人经历

android学习两个月心得 我于大三下学期,开始准备学习android,在寒假期间,学了毕向东的java视频的前10天,觉得还不错,上网找评论,他们都说,只要学到多线程就可以学习android了, 开学我就开始了android的学习,做了一些简单的UI,实现了几个简单Activity的信息传递和跳转.但是在学习的过程中我发现(到目前为止,大概两个月),android的知识点就像是一片又一片的花瓣,你可以任意挑选这去学习,没有一个权威的方向. 各种视频教程,图书,包括android的官方开发文档

Android 学习笔记 2 Android开发环境的安装(Eclipse Bundle)

搭建eclipse开发环境,一般要经过 安装JDK.安装Eclipse.下载Android SDK.在Eclipse中安装ADT.在Eclipse中配置Android SDK.通过SDK Manager对Android SDK进行管理等几个比较麻烦的步骤. 后来Google推出了 adt-bundle 将ATD.SDK整合到Eclipse中,这样对于新手来说就免去了很多步骤,入门更容易了. 在此推荐一个网站 http://tools.android-studio.org/ 可以免去搬梯子去And

Android学习心得(16) --- Dex文件结构实例解析(2)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助. 这一篇我们讲述一下通过一个实例来分析dex文件结构和组成. 参考Leb128数据类型 Android学习心得(5) --- dex数据类型LEB128 参考实例分析学习理解dex文件结构Android学习心得(15) --- Dex文件结构解析(1) 参考baksmali工具使用Android学习心得(4) --- MAC下smali文件编写与运行 1.编译 我们通过一个例子来分析dex文件的构成 创建一个Hello.java文