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. Unity WWW类调用http

    1.Http请求中Content-Type讲解 MediaType,即是Internet Media Type,互联网媒体类型:也叫做MIME类型,在Http协议消息头中,使用Content-Type ...

  2. cogs 2056. 无平方因子数

    2056. 无平方因子数 ★☆   输入文件:non.in   输出文件:non.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 给出正整数n,m,区间[n,m]内的无 ...

  3. [ReactVR] Start a Virtual Reality Project Using the React VR CLI

    We will learn how to set up a React VR project, run the development mode with hot reloading, and tak ...

  4. 根据数据库表结构生成java类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

  5. 137.CPP自带异常

    #include <iostream> #include <exception> using namespace std; //继承自带的异常 class sizeerror ...

  6. Ubuntu 14.04下从源码安装qt4.x

    转自:http://www.cnblogs.com/crazywangzx/p/3505293.html 1.到官网http://qt-project.org/downloads或者ftp://ftp ...

  7. springmvc两种非注解的处理器适配器

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  8. c#学习0217

    1 继承 继承 1 子类是否继承了父类的构造函数 答案:子类并没有继承父类的构造函数 但是子类或默认调用父类的无参数的构造函数 在子类中创建父类对象 这样子类才可以使用父类的成员 如果在父类中声明了有 ...

  9. 联想E490 加M.2固态硬盘 卡在第一画面不动解决办法

    电脑配置:  E490  500G机械硬盘,自己加M.2 NVMe 固态硬盘. 问题:启动时出现 2101:Detection error on SSD1(M.2),  无法识别到机械硬盘 (重新插拨 ...

  10. 史上最简单的在 Yii2.0 中将数据导出成 Excel

    在 vendor/yiisoft/yii2/helpers/ 创建一个 Excel.php <?php namespace yii\helpers;   class Excel{         ...