失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 手势检测(左右滑动 上下滑动)

android 手势检测(左右滑动 上下滑动)

时间:2018-12-18 12:16:27

相关推荐

android 手势检测(左右滑动 上下滑动)

开发十年,就只剩下这套Java开发体系了 >>>

GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等。

使用GestureDetector分三步:

1. 定义GestureDetector类

2. 初始化手势类,同时设置手势监听

3. 将touch事件交给gesture处理

这里总共重写了六个函数,这些函数都在什么情况下才会触发呢,下面讲一下:

OnDown(MotionEvent e):用户按下屏幕就会触发;

onShowPress(MotionEvent e):如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行,具体这个瞬间是多久,我也不清楚呃……

onLongPress(MotionEvent e):长按触摸屏,超过一定时长,就会触发这个事件

触发顺序:

onDown->onShowPress->onLongPress

onSingleTapUp(MotionEvent e):从名子也可以看出,一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件

触发顺序:

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

onDown->onSingleTapUp->onSingleTapConfirmed

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

onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) :滑屏,用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发

参数解释:

e1:第1个ACTION_DOWN MotionEvent

e2:最后一个ACTION_MOVE MotionEvent

velocityX:X轴上的移动速度,像素/秒

velocityY:Y轴上的移动速度,像素/秒

onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY):在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法 在ACTION_MOVE动作发生时就会触发

滑屏:手指触动屏幕后,稍微滑动后立即松开

onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling

拖动

onDown------》onScroll----》onScroll------》onFiling

可见,无论是滑屏,还是拖动,影响的只是中间OnScroll触发的数量多少而已,最终都会触发onFling事件!

package com.guorentong.learn.myapplication;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.GestureDetector;import android.view.MotionEvent;public class MainActivity extends AppCompatActivity {protected static final float FLIP_DISTANCE = 50;GestureDetector mDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}/**** e1 The first down motion event that started the fling. e2 The* move motion event that triggered the current onFling.*/@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {if (e1.getX() - e2.getX() > FLIP_DISTANCE) {Log.i("MYTAG", "向左滑...");Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);return true;}if (e2.getX() - e1.getX() > FLIP_DISTANCE) {Log.i("MYTAG", "向右滑...");return true;}if (e1.getY() - e2.getY() > FLIP_DISTANCE) {Log.i("MYTAG", "向上滑...");return true;}if (e2.getY() - e1.getY() > FLIP_DISTANCE) {Log.i("MYTAG", "向下滑...");return true;}Log.d("TAG", e2.getX() + " " + e2.getY());return false;}@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}});}@Overridepublic boolean onTouchEvent(MotionEvent event) {return mDetector.onTouchEvent(event);}}

如果觉得《android 手势检测(左右滑动 上下滑动)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。