OnTouchListener使用

public class ViewActivity extends Activity implements View.OnTouchListener {

    @Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.view_gestrue); LinearLayout ll_context = (LinearLayout) findViewById(R.id.ll_context);
ll_context.setOnTouchListener(this); } @Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
Log.v("-->", "手指碰到屏幕");
break;
case MotionEvent.ACTION_MOVE:
Log.v("-->", "手指在移动");
break;
case MotionEvent.ACTION_OUTSIDE:
Log.v("-->", "手指离开view的边界");
break;
case MotionEvent.ACTION_UP:
Log.v("-->", "手指离开屏幕");
break;
case MotionEvent.ACTION_SCROLL:
Log.v("-->", "手指在滑动");
break;
case MotionEvent.ACTION_POINTER_DOWN:
Log.v("-->", "非主手指碰到屏幕");
break;
case MotionEvent.ACTION_POINTER_UP:
Log.v("-->", "非主手指离开屏幕");
break;
}
return true;//拦截事件
}
}

Tip:MotionEvent经常用法

event.getY();//触碰点获取距离v顶部的距离
event.getRawY();//触碰点获取距离屏幕顶部的距离
event.getPointerCount();//获取触碰手指的个数

GestureDetector使用:

//GestureDetector这个类对外提供了两个接口:OnGestureListener,OnDoubleTapListener,另一个内部类SimpleOnGestureListener。

GestureDetector.OnGestureListener接口:用来通知普通的手势事件,该接口有例如以下六个回调函数:

1.onDown(MotionEvent e):down事件;

2.onSingleTapUp(MotionEvent e):一次点击up事件;在touch down后又没有滑动

(onScroll),又没有长按(onLongPress),然后Touchup时触发。

点击一下很快的(不滑动)Touchup:

onDown->onSingleTapUp->onSingleTapConfirmed

点击一下略微慢点的(不滑动)Touchup:

onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

3.onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件。Touch了还没有滑动时触发(与onDown。onLongPress)比較onDown仅仅要Touch down一定立马触发。

而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。

所以Touchdown后一直不滑动

依照onDown->onShowPress->onLongPress这个顺序触发。

4.onLongPress(MotionEvent e):长按事件。Touch了不移动一直Touch down时触发

5.onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件。Touch了滑动一点距离后,在ACTION_UP时才会触发參数:e1 第1个ACTION_DOWN MotionEvent 而且仅仅有一个;e2 最后一个ACTION_MOVE MotionEvent ;velocityX X轴上的移动速度,像素/秒 。velocityY Y轴上的移动速度,像素/秒.触发条件:X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

6.onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。

不管是用手拖动view,或者是以抛的动作滚动,都会多次触发,这种方法在ACTION_MOVE动作发生时就会触发

抛:手指触动屏幕后,略微滑动后马上松开

GestureDetector.OnDoubleTapListener接口:用来通知DoubleTap事件,相似于鼠标的双击事件。

1.onDoubleTap(MotionEvent e):在双击的第二下。Touch down时触发 。

2.onDoubleTapEvent(MotionEvent e):通知DoubleTap手势中的事件。包括down、up和move事件(这里指的是在双击之间发生的事件,比如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知)。双击的第二下Touch down和up都会触发,可用e.getAction()区分。

3.onSingleTapConfirmed(MotionEvent e):用来判定该次点击是SingleTap而不是DoubleTap,假设连续点击两次就是DoubleTap手势。假设仅仅点击一次。系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。

这种方法不同于onSingleTapUp,他是在GestureDetector确信用户在第一次触摸屏幕后,没有紧跟着第二次触摸屏幕。也就是不是“双击”的时候触发

tip:

//distanceX。是前后两次call的X距离,不是e2与e1的水平距离; 是前后两次call的Y距离,不是e2与e1的垂直距离

用法:

1:继承GestureDetector.OnGestureListener

2:实例化检測器GestureDetector mDetector = new GestureDetector(ViewActivity.this, this);

3:在ontouch里面回调方法

@Override
public boolean onTouch(View v, MotionEvent event) {
mDetector.onTouchEvent(event);
return true;
}

參考链接:

用户手势检測-GestureDetector使用具体解释

android触控,先了解MotionEvent

Android触碰事件的更多相关文章

  1. Android:触屏事件

    Android触屏事件包含两种: 1)屏幕触屏事件:重写onTouchEvent(MotionEvent event): 2)控件触屏事件:给控件注册触屏事件,setOnTouchEventListe ...

  2. cocos2dx基础篇(7) 触碰事件

    cocos2dx游戏引擎的重点是在于移动设备的跨平台开发,而移动设备上的游戏大部分都是通过屏幕触碰来进行的.比如主菜单的按钮触碰,打飞机中飞机的触碰移动,都需要用到触碰操作.想一想之前讲的菜单按钮CC ...

  3. cocos2d-html5 让图层阻挡下层触碰事件

    目前最新版本是3.8.1,基本上基于3.x之后的都可以这样处理: 给当前图层一个成员变量:_touchListener 一个成员方法: onTouchBegan:function(touch,even ...

  4. Android基础新手教程——3.4 TouchListener PK OnTouchEvent + 多点触碰

    Android基础新手教程--3.4 TouchListener PK OnTouchEvent + 多点触碰 标签(空格分隔): Android基础新手教程 本节引言: 如题,本节给大家带来的是To ...

  5. TouchListener PK OnTouchEvent + 多点触碰

    1.基于监听的TouchListener 代码示例: 实现效果图: 实现代码: main.xml <RelativeLayout xmlns:android="http://schem ...

  6. 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)

    本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...

  7. Android 关于 OnScrollListener 事件顺序次数的简要分析

    在 Android 的 OnScrollListener 整个事件我主要分析下他的执行顺序: 实现滚动事件的监听接口 new AbsListView.OnScrollListener(){ @Over ...

  8. 安卓Tv开发(一)移动智能电视之焦点控制(触控事件)

    前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验风格上有很大的区别,本系列博 ...

  9. android触控,先了解MotionEvent(一)

    http://my.oschina.net/banxi/blog/56421 这是我个人的看法,要学好android触控,了解MotionEvent是必要,对所用的MotionEvent常用的API要 ...

随机推荐

  1. JS实现缓存运动

                                                                                                      JS ...

  2. Having用法

    HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似.WHERE 搜索条件在进行分组操作之前应用:而 HAVING 搜索条件在进行分组操作之后应用 ...

  3. 记一次BootStrap的使用

    效果图如下: 一.简介: 什么是Bootstrap?  Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架. 什么是响应式布局? 引用一句Bootstrap的标题语 “Boots ...

  4. 2015 Multi-University Training Contest 7 hdu 5375 Gray code

    Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  5. Pointcut is not well-formed: expecting 'name pattern' at character position 36

    Pointcut is not well-formed: expecting 'name pattern' at character position 36 学习了:http://blog.csdn. ...

  6. servlet调用的几种方式

    參见 文库/java/javaEE全新学习教程2.2节 1.通过URL调用 2通过提交表单 3超链接 4 javascript写一个函数,调用这个函数 1,首先在project的WebRoot目录下建 ...

  7. swift算法手记-7

    @IBAction func compute(sender: AnyObject) { // 19*x^7-31*x^5+16*x^2+7*x-90=0 // newton迭代法求一元方程的解,最大求 ...

  8. JAVA设计模式之【建造者模式】

    建造者模式 建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品 角色 Builder抽象建造者 buildPartX getResult ConcreteBuilder具体建 ...

  9. iOS定义静态变量、静态常量、全局变量

    静态变量 当我们希望一个变量的作用域不仅仅是作用域某个类的某个对象,而是作用域整个类的时候,这时候就可以使用静态变量. staticstatic修饰的变量,是一个私有的全局变量.C或者Java中sta ...

  10. Android VelocityTracker类和Scroller类

    VelocityTracker类:用于跟踪触屏事件的速度,通常使用VelocityTracker的步骤如下: static VelocityTracker obtain():获取一个VelocityT ...