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. java分页之假分页

    假分页,顾名思义,不是真正的在数据库里进行过滤,而是从数据库查询之后,取得全部结果,在展现的时候做些手脚. import java.util.ArrayList; import java.util.L ...

  2. 创业笔记-Node.js入门之基于事件驱动的回调

    基于事件驱动的回调 这个问题可不好回答(至少对我来说),不过这是Node.js原生的工作方式.它是事件驱动的,这也是它为什么这么快的原因. 你也许会想花点时间读一下Felix Geisendörfer ...

  3. WCF与WEB API区别

  4. Maven中的parent定义的dependency,其中继承者是可以直接使用parent中的Maven Dependencies的。

    Maven中的parent定义的dependency,其中继承者是可以直接使用parent中的Maven Dependencies的. packagin要选择jar,parent project要选择 ...

  5. HDU 4165

    一块药看成括号配对就行了.很明显的直接求卡特兰数. 今晚看了HDU 3240的题,有一点思路,但无情的TLE.想不到什么好方法了,看了别人的解答,哇...简直是天才的做法啊....留到星期六自己思考一 ...

  6. HDU 2841

    明显,当(X,Y)=1时,是可以看见的. 这题,记得POJ 上也有类似的一题... 不过比较奇怪的是,我以为会超时,因为范围达到了100000,但竟然直接枚举没超时.... #include < ...

  7. iOS-UIImage imageWithContentsOfFile 和 imageName 对照

    1.imageWithContentsOfFile NSString *imagePath = [NSString stringWithFormat:@"%@/%@",[[NSBu ...

  8. Loopback測试软件AX1用户手冊 V3.1

    点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip™的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip™评估 ...

  9. web程序定时器

    package com.timer; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ...

  10. Oracle 学习笔记 13 -- 控制用户权限

    数据库控制语言的功能室控制用户对数据库的存取权限. 用户对某类数据具有何种操作权限是有DBA决定的.Oracle 通过GRANT语句完毕权限的授予,通过REVOKE语句完毕对权限的收回. 权限分为系统 ...