博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android触碰事件
阅读量:6609 次
发布时间:2019-06-24

本文共 3551 字,大约阅读时间需要 11 分钟。

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里面回调方法

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

參考链接:

转载地址:http://jniso.baihongyu.com/

你可能感兴趣的文章
将某个目录下的 文件(字符窜) 只将数字过滤出来
查看>>
机器学习之常见机器学习算法---面试之常见机器学习算法简单思想梳理
查看>>
C# 委托和泛型
查看>>
Beginning Silverlight 4 in C#-数据绑定和Silverlight List控件
查看>>
springmvc 404 视图解析器配置错误
查看>>
WinForm窗体更新程序
查看>>
DDD-EF-数据仓储
查看>>
Mysql中的SQL优化总结
查看>>
Git 基础 —— 常见使用场景
查看>>
jQuery验证框架教程
查看>>
随笔小问题(一)--mac打开class文件
查看>>
xiami_downloader辅助脚本
查看>>
全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
查看>>
AspNetPager控件的最基本用法
查看>>
CSS选择器、优先级与匹配原理
查看>>
libevent reference Mannual II--library
查看>>
urllib模块
查看>>
python3 - 默认参数为列表
查看>>
Python-eval()函数
查看>>
XML转义字符
查看>>