GestureDetector_OnGestureListener

2023-10-19 15:58

本文主要是介绍GestureDetector_OnGestureListener,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、总

OnGestureListener有下面的几个动作:

按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。
长按(onLongPress): 手指按在持续一段时间,并且没有松开。
滚动(onScroll): 手指在触摸屏上滑动。
按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
抬起(onSingleTapUp):手指离开触摸屏的那一刹那。

使用OnGestureListener接口,这样需要重载OnGestureListener接口所有的方法,适合监听所有的手势,正如官方文档提到的“Detecing All Supported Gestures”。

二、例子分析个人方法含义

public class MyGesture extends Activity implements OnTouchListener, OnGestureListener {   private GestureDetector mGestureDetector;   public MyGesture() {   mGestureDetector = new GestureDetector(this);   }   public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   TextView tv = (TextView) findViewById(R.id.tv);   tv.setOnTouchListener(this);   tv.setFocusable(true);   tv.setClickable(true);   tv.setLongClickable(true);   mGestureDetector.setIsLongpressEnabled(true);   }   /*  * 在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector  * 来分析是否有合适的callback函数来处理用户的手势  */    public boolean onTouch(View v, MotionEvent event) {   return mGestureDetector.onTouchEvent(event);   }   // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发   public boolean onDown(MotionEvent arg0) {   Log.i("MyGesture", "onDown");   Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();   return true;   }   /*  * 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发  * 注意和onDown()的区别,强调的是没有松开或者拖动的状态  */  public void onShowPress(MotionEvent e) {   Log.i("MyGesture", "onShowPress");   Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show();   }   // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发   public boolean onSingleTapUp(MotionEvent e) {   Log.i("MyGesture", "onSingleTapUp");   Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show();   return true;   }   // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {   Log.i("MyGesture", "onFling");   Toast.makeText(this, "onFling", Toast.LENGTH_LONG).show();   return true;   }   // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {   Log.i("MyGesture", "onScroll");   Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show();   return true;   }   // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发   public void onLongPress(MotionEvent e) {   Log.i("MyGesture", "onLongPress");   Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show();   }   
}  

三 、实例分析

1.Fling事件的处理代码:除了第一个触发Fling的ACTION_DOWN和最后一个ACTION_MOVE中包含的坐标等信息外,我们还可以根据用户在X轴或者Y轴上的移动速度作为条件。比如下面的代码中我们就在用户移动超过100个像素,且X轴上每秒的移动速度大于200像素时才进行处理。

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {   // 参数解释:   // e1:第1个ACTION_DOWN MotionEvent   // e2:最后一个ACTION_MOVE MotionEvent   // velocityX:X轴上的移动速度,像素/秒   // velocityY:Y轴上的移动速度,像素/秒   // 触发条件 :   // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒   final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;   if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {   // Fling left   Log.i("MyGesture", "Fling left");   Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();   } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {   // Fling right   Log.i("MyGesture", "Fling right");   Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();   }   return false;   
}  
2.类似播放器组件,左侧滑动调节音量,右侧滑动调节亮度

public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {if(2 == mNumFin) return false;float mOldX = e1.getX();float mOldY = e1.getY();float mCurY = e2.getY();if(mOldX < info.sWidth/10.0){ //左区域滑动changeLight((mOldY-mCurY)/info.sHeight);}else if(mOldX > info.sWidth*9/10.0){//右区域滑动changeVoice((mOldY-mCurY)/info.sHeight);}return false;}

3.类似电子书。判断用户左滑还是右滑

    @Override   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,   float velocityY) {   // TODO Auto-generated method stub   if (e1.getX()-e2.getX() > FLING_MIN_DISTANCE    && Math.abs(velocityX) > FLING_MIN_VELOCITY) {    // Fling left    Toast.makeText(this, "向左手势", Toast.LENGTH_SHORT).show();    } else if (e2.getX()-e1.getX() > FLING_MIN_DISTANCE    && Math.abs(velocityX) > FLING_MIN_VELOCITY) {    // Fling right    Toast.makeText(this, "向右手势", Toast.LENGTH_SHORT).show();    }    return false;    }   

就这样。

这篇关于GestureDetector_OnGestureListener的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/240826

相关文章

GestureDetector 手势识别

通过系统提供的MotionEvent来监测各种手势和(触摸)事件。当一个指定的手势事件发生时,GestureDetector.OnGestureListener回调函数将通告用户。这个类仅仅处理由触摸引发的MotionEvent(不能处理由轨迹球引发的事件)。要使用这个类需执行以下操作 1. 为你的View建立一个GestureDetector实例。 2. 在View的onTouchEve

Touch事件--对GestureDetector的理解

作用 简单来说,GestureDetector对View触摸事件的封装。它是触摸事件的帮助类。 我们知道通过重新复写View/ViewGroup的dispatchTouchEvent方法,可以定义View对触摸事件的处理。但是,如果我们根据这些事件完成对一个View的双击、滑动(fling)等触摸操作,还是比较困难的。因为我们要写很多关于算法类的东西。而使用GestureDetector,就

Android手势识别GestureDetector和ScaleGestureDetector介绍与使用,以自定义一个可拖拽拉伸的ImageView为例

一、GestureDetector 1. 简介 GestureDetector主要用于检测单指手势,例如单击、长按、滑动等,不支持多指手势。 2. SimpleOnGestureListener 内部类 GestureDetector.SimpleOnGestureListener 是用于处理手势事件的辅助类,它包含了一系列回调方法,用于处理不同类型的单指手势事件。下面是对每个回调方法的简

Android中的GestureDetector(手势)详细区分介绍

Android为了手势检测提供了GestureDetector手势识别类。GestureDetector类代表一个手势检测器,创建GestureDetector时需要传人一个GestureDetector.OnGestureListener实例,GestureDetector.OnGestureListener就是一个监听器,负责对用户的手势行为提供响应。 如果GestureDetector.S

实现滑动切换效果:ViewFlipper、OnGestureListener

例子中用到的三个主要控件:ViewFlipper、OnGestureListener、OnDoubleTapListener GestureSlide_act.java文件 /*** 实现滑动切换效果:ViewFlipper、OnGestureListener* * * OnGestureListener和OnDoubleTapListener接口定义:public interfa

Flutter GestureDetector 属性介绍及使用

Flutter 是一款强大的跨平台移动应用框架,它提供了丰富的组件和功能,以便开发者构建高性能、美观的移动应用。其中,GestureDetector 是一个非常重要的手势识别组件,用于捕获用户在屏幕上的各种手势操作。在本文中,我们将深入介绍 GestureDetector 的属性以及如何在Flutter应用中使用它。 GestureDetector 简介 GestureDetector 是Fl

Android : 使用GestureDetector 进行手势识别—简单应用

示例图: GestureDetector 介绍: GestureDetector 是 Android 开发中用于识别和处理手势的一个类。它允许开发者检测用户在触摸屏上的各种手势,如滑动、长按、双击等。通过使用 GestureDetector,您可以轻松地为应用程序添加手势识别功能,从而提供更直观和自然的用户界面。 API:手势检测器 |Android 开发者 (google.cn) 使

flutter学习-day22-使用GestureDetector识别手势事件

文章目录 1. 介绍2. 使用2-1. 单击双击和长按2-2. 拖动和滑动2-3. 缩放 3. 注意点 1. 介绍 在 flutter 中,GestureDetector 是手势识别的组件,可以识别点击、双击、长按、拖动、缩放等手势事件,并且可以与子组件进行交互,构造函数属性如下: (new) GestureDetector GestureDetector({// 可选的Key

OnGestureListener的一些体会

一个activity中new一个GestureDetector之后,里面会实现一下的方法: onSingleTapUp onShowPress onScroll onLongPress onFling onDown   说一下这些方法都是由那些MotionEvent触发的 今天的项目用到了onSingleTapUp和onShowPress和onLongPress和onFling; //用户

手势监听类GestureDetector Listener源码解析

手势监听类GestureDetector 前言一、GestureDetector是什么?二、Listener源码解析1.OnGestureListener2.OnDoubleTapListener3.OnContextClickListener4.SimpleOnGestureListener 总结 前言 在写自定义view的时候,涉及到了手势监听这块的知识,补充下知识营