android手势检测类的扩展支持单点和多点触摸
来源:互联网 发布:购买汽车配件的软件 编辑:程序博客网 时间:2024/05/21 15:47
android提供的手势检测类不支持多点手势的检测,这个挺奇怪的。而工作中经常会有手势放大缩小之类的需求,如果每次要在自己在实现类里
判断手势,一来代码冗余不利于维护,二来判断手势的代码有时候写起来还比较费劲的(你看android手势检测类就知道了,那么多的变量)。
我想要的只是在一个手势的回调方法里实现自己的业务代码,多省事。
基于以上的原因还是封装一个吧,这样就一劳永逸了。实现的原理是:
鉴于原来就有手势检测类,google大神写的肯定比我等靠谱和高效,所以能拿来用的就继续用,不能的就自己实现了,
原本的手势检测类里提供了很多常用的回调,比如:点击,长按,双击,滑动等等。
新提供了四个新的接口放大、缩小、向左滑、向右滑,主要是我的业务里用到了这几个哈哈。。。
使用方法跟GestureDetector一样,详见demo。
好吧!小菜鸟一个如果代码写的不好请批评指正,谢谢!
demo下载地址:http://download.csdn.net/detail/q384415054/7015103
贴一下主要的代码:
/**
自己实现的监听器
*/
public interface CustomGestureListener {public abstract boolean onZoomUp(MotionEvent ev);public abstract boolean onZoomDown(MotionEvent ev);public abstract boolean onMoveLef(MotionEvent ev);public abstract boolean onMoveRight(MotionEvent ev);}
/**
检测手势的主要方法,很简单吧,主要还是靠系统的手势检测类
*
public boolean onDetectorGesture(MotionEvent ev){if (ev == null) {return false;}boolean isConsumed = false;switch (ev.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_POINTER_DOWN:mIsMultiple = true;mLastDistance = calculateDistance(ev);System.out.println("ACTION_POINTER_DOWN_distance0=" + mLastDistance);break;case MotionEvent.ACTION_MOVE:if (mIsMultiple) {float distance = calculateDistance(ev);//System.out.println("distance=" + distance + ", mLastDistance=" + mLastDistance);if (distance - mLastDistance > 50f) {mLastDistance = distance;isConsumed = mGestureListener.onZoomUp(ev);} else if (distance - mLastDistance < -50f) {mLastDistance = distance;isConsumed = mGestureListener.onZoomDown(ev);}}break;case MotionEvent.ACTION_UP:System.out.println("ACTION_UP");mIsMultiple = false;break;}return isConsumed ? isConsumed : mGestureDetector.onTouchEvent(ev);}
实现了系统的监听和自定义的监听器的抽象类
*/
public abstract class AbsGestureListener extends SimpleOnGestureListener implements CustomGestureListener{@Overridepublic boolean onMoveLef(MotionEvent ev) {return false;}@Overridepublic boolean onMoveRight(MotionEvent ev) {return false;}@Overridepublic boolean onZoomDown(MotionEvent ev) {return false;}@Overridepublic boolean onZoomUp(MotionEvent ev) {return false;}/** * 猛的一划,最后手指离开屏幕 */@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {float diffX = e1.getX() - e2.getX();float diffY = e1.getY() - e2.getY();//X轴上的移动距离较大并且X轴上的移动速度大于300像素每秒if (Math.abs(diffX) > Math.abs(diffY) && Math.abs(velocityX) > 300f) {if (diffX < -50f) {return onMoveRight(e2);} else if (diffX > 50f) {return onMoveLef(e2);}}return super.onFling(e1, e2, velocityX, velocityY);}}
0 0
- android手势检测类的扩展支持单点和多点触摸
- 多点触摸和手势检测
- 单点触摸和多点触摸的使用方法
- PhotoView:一款扩展自Android ImageView 支持通过单点/多点触摸来进行图片缩放的智能控件
- Android PhotoView :一款扩展自ImageView 支持通过单点/多点触摸来进行图片缩放的智能控件。
- android 单点和多点触摸事件
- Android多点触摸和手势识别
- Android-单点触摸-多点触摸
- unity3d FingerGestures 单点 多点触摸 手势
- 【Unity】unity3d FingerGestures 单点 多点触摸 手势
- 【Android界面实现】PhotoView——支持单点/多点触摸的放缩图片的实现
- Unity判断手势的滑动方向,单点触摸和多点触摸,并获取刚触摸以及触摸结束事的坐标
- 支持元素惯性拖放和多点触摸手势的js插件
- Android多点触摸与手势
- Android多点触摸与手势
- Android多点触摸与手势
- 5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬
- android支持多点触摸的补丁
- java工厂模式的三种方式
- 求2+22+222+2222+22222的值
- 2014ACM集训13级PK赛2-Somali Pirates
- PHP学习3 查询
- POJ 3904 Sky Code 解题报告(容斥原理)
- android手势检测类的扩展支持单点和多点触摸
- codec engine代码阅读二---根目录下的release notes
- 编写计算“两个整数的最大公约数”程序。 要求通过键盘输入两个整数、检查输入整数是否符合要求,并计算出其最大公约数。
- php中单引号和双引号的区别
- cocos2d-x中的CCArray
- PHP学习4 查询
- bjam.exe stage --toolset=msvc-12.0 vs2013 编译boost
- codec engine代码阅读三---example文件夹
- PHP学习 简单分页