public class MyGesture extends SimpleOnGestureListener {
private GestureDetector gd; // onGestureListener需要F和onTouchListener配合使用,实际上是onTouchListenerF监听到用户的
// 触摸,他把他所有监听到的用户触摸通知"手势识别"类对象,手势识别类对象处理后触发对应的函数,例如onFling, onLongPress等等。
public void test(MotionEvent ev) {
gd.onTouchEvent(ev);
} // GestureDetector默认是打开LongPress通知的,但是有个问题,长按后,手不离开屏幕且滑动,这个时候发现没有滑动事件。
// 这个问题的解决办法是设置手势识别对象,禁止产生长按事件
// gd.setIsLongpressEnabled(false);
// 当然,没有禁用长按事件,滑动事件还是有效的,只是要确保触屏后马上滑动,不要等系统产生了长按。 public final class GestureListener implements OnGestureListener { @Override
public boolean onDown(MotionEvent e) {
// 触摸屏按下时立刻触发
return false;
} @Override
public void onShowPress(MotionEvent e) {
// 短按,触摸屏按下后片刻后抬起,会触发这个手势,如果迅速抬起则不会;强调的是没有松开或者拖动的状态,由一个ACTION_DOWN触发
} @Override
public boolean onSingleTapUp(MotionEvent e) {
// 抬起,手指离开触摸屏时触发(长按、滚动、滑动时,不会触发这个手势)
return false;
} @Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// 用户按下触摸屏,并拖动,由1个 ACTION_DOWN, 多个ACTION_MOVE触发
return false;
} @Override
public void onLongPress(MotionEvent e) {
// 长按,触摸屏按下后既不抬起也不移动,由多个 ACTION_DOWN触发
} @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// 滑动,触摸屏按下后快速移动并抬起,会先触发滚动手势,跟着触发一个滑动手势
// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
return false;
}
} public final class DoubleTapListener implements OnDoubleTapListener { @Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// 单击确认,即很快的按下并抬起,但并不连续点击第二下
return false;
} @Override
public boolean onDoubleTap(MotionEvent e) {
// 双击,手指在触摸屏上迅速点击第二下时触发
return false;
} @Override
public boolean onDoubleTapEvent(MotionEvent e) {
// 双击事件发生的时候,按下和抬起各触发一次
return false;
} // 对于自定义View,使用手势识别有两处陷阱可能会浪费你的不少时间。
// 1:View必须设置longClickable为true,否则手势识别无法正确工作,只会返回Down, Show, Long三种手势
// 2:必须在View的onTouchListener中调用手势识别,而不能像Activity一样重载onTouchEvent,否则同样手势识别无法正确工作
public class MyView extends View {
private GestureDetector mGestureDetector; public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, null);
setLongClickable(true);
this.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
});
}
}
}
}

Android 手势识别的更多相关文章

  1. Android手势识别的发展

    在播放器.与手势识别.所以,看看今天的我们Android手势识别. 首先,我们需要站在巨人的肩膀上.有些人举了个例子和说明. 第一章: http://www.2cto.com/kf/201110/10 ...

  2. 札记:android手势识别,MotionEvent

    摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...

  3. Android手势识别(单击 双击 抬起 短按 长按 滚动 滑动)

    对于触摸屏,其原生的消息无非按下.抬起.移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理.不过,为了提高我们的APP的用户体验,有时候我们 ...

  4. Android手势识别总结

    一:首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouc ...

  5. android手势识别ViewFlipper触摸动画

    使用ViewFlipper来将您要来回拖动的View装在一起,然 后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可.比如当手指向左快速滑动时跳转到上一 ...

  6. Android 手势识别—缩放

    上一篇讲解了手势识别中的点击和双击事件的识别,用到的是GestureDetector类和GestureDetectorCompat类,用于监听用户触摸屏幕中的简单动作. 缩放 基本用法如下,可以通过缩 ...

  7. Android 手势识别——单击/双击

    为什么需要手势识别? 手势对于我们的app有很多的地方都在使用,比如右滑关闭界面等.手势控制分为触发动作(Touch Mechanics,用户手指在屏幕上如何动作)和触发行为(Touch Activi ...

  8. Android+手势识别详解

      今天就来把以前的学习文章与经验简单总结中出来吧,在这里我就直接把代码贴下来了,希望能给初学者做最佳的学习参考,也希望有更多的开发人员来加入 ANDROID开发团队,参与更多的创新方式的开发,好了, ...

  9. 【转】android 手势识别和VelocityTracker

    参考地址: http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html http://www.jcodecraeer.co ...

  10. android手势识别

    一.简单手势识别: 简单手势识别分为以下几个步骤: 1.手指触碰屏幕时,触发MotionEvent事件: 2.该事件被OnTouchListener监听,可在它的onTouch()方法中获得该Moti ...

随机推荐

  1. Webservice HTTP

    由于项目需要:自己写了一个WebserviceDemo,把遇到的问题记下来. 方式一 :使用代理类来访问Webservice,此方式不讲解,感觉复杂(神坑). (生成的代理路径 C:\Users\ad ...

  2. memory引擎和innodb引擎速度对比

    ysql> insert into innodb_test (name) select name from innodb_test; Query OK, rows affected ( min ...

  3. Selenium 入门到精通系列:三

    Selenium 入门到精通系列 PS:Driver_Element 常用方法 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2 ...

  4. 前端开发工程师 - 04.页面架构 - CSS Reset & 布局解决方案 & 响应式 & 页面优化 &规范与模块化

    04.页面架构 第1章--CSS Reset 第2章--布局解决方案 居中布局 课堂交流区 水平列表的底部对齐 如图所示,一个水平排列的列表,每项高度都未知,但要求底部对齐,有哪些方法可以解决呢? & ...

  5. 了解Python控制流语句——if语句

    控制流 截止到现在,在我们所看过的程序中,总是有一系列语句从上到下精确排列,并交由 Python 忠实地执行.如果你想改变这一工作流程,应该怎么做?就像这样的情况:你需要程序作出一些决定,并依据不同的 ...

  6. 使用pycharm软件配置数据库可视化

    必须品: pycharm软件,专业版最好自带就有,社区版就需要安装下插件. 专业版直接会在右边的编辑框浮动,直接点开就可以配置. 如图所示,点开就可以配置相应的数据库, 点开配置完毕就可以使用了. 还 ...

  7. 【radio-group、radio】 单选项组件说明

    radio-group组件是包裹radio组件的容器 原型: <radio-group bindchange="[EventHandle]"> <radio .. ...

  8. nginx 重启报错

    错误信息: nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or d ...

  9. 《Effective C++》读书笔记 被你忽略的关于构造析构赋值

    如果程序员没有定义,那么编译器会默认隐式为你创建一个copy构造函数,一个copy赋值操作符,一个析构函数.另外如果你没有声明任何构造函数,编译器会为你声明一个default构造函数. 但是只有当这些 ...

  10. 十 Writing YARN Applications

    本节介绍:     使用yarn 高级提交写yarn应用程序.其实已经yarn底层API.MR计算框架对底层的API实现了封装. 高级提交指直接使用yarn的三种接口来提交应用程序: 1)YarnCl ...