151020_example_GestureDetector详解
来源:互联网 发布:midas有限元分析软件 编辑:程序博客网 时间:2024/06/06 13:16
啰嗦几句,GestureDetector中包含很多种对屏幕操作的触发,但是和平常我们设置的点击事件还是有点不同的。或者说GestureDetector是通过平常用的控件实现的。
而平常使用的控件设置的对屏幕的响应,太多了,学习GestureDetector只能做一个较好的开头吧,帮助理解onScroll,onFling这些东西。
好了,以上的话语有些乱,基本写给自己看的,能看懂的就看,看不懂的直接了解GestureDetector吧。
1,大概:
GestureDetector 下有两个监听事件,分别是OnGestureListener 和 OnDoubleTapListener,使用implements
一个类,SimpleOnGestureListener ,使用extends 方式。
2,细节部分请看连接,(太乱,我还是喜欢比较清楚)
http://blog.csdn.net/harvic880925/article/details/39520901
3,直接上源码,注释什么的都在源码里面,(mLog 说明,这是在父类里面实现了一个 log 方法,读者可自行理解成 Log.i("dadada",...))
MainActivity.java
package f21.gestrue;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.ImageView;import f21.gesture.R;import f21.lib.base.BaseActivity;/** * 按一下: * 轻触 瞬间的事 :onDown onSingleTapUp onSingleTapConfirmed(2) * 触碰 0.5s - 1s : onDown onShowPress onSingleTapUp onSingleTapConfirmed(2) * 长按 1s 以上 :onDownonShowPressonLongPress * * 拖动: * 快速滑屏 :onDownonScrollonScroll...onScrollonFling * 按下停顿一下再滑:onDownonShowPressonScroll ...onScroll结束 * * 按两下: * 快速两下 :onDownonSingleTapuponDoubleTap(2)OnDoubleTapEvent(2)onDownOnDoubleTapEvent(2) * 缓慢两下 :onDownonSingleTapuponSingleTapConfirmed(2)onDown onSingleTapup onSingleTapConfirmed(2) */public class MainActivity extends BaseActivity {private ImageView iv_gesture;private GestureDetector gestureDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);GestureDetector.OnGestureListener listener = new getstureListener();gestureDetector = new GestureDetector(MainActivity.this, listener);GestureDetector.OnDoubleTapListener listener2 = new getstureListener2();gestureDetector.setOnDoubleTapListener(listener2);iv_gesture = (ImageView) findViewById(R.id.tv_main_gesture);iv_gesture.setFocusable(true);iv_gesture.setClickable(true);iv_gesture.setSelected(true);iv_gesture.setLongClickable(true);/** * 在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法, * 将捕捉到的MotionEvent交给GestureDetector * 来分析是否有合适的callback函数来处理用户的手势 */iv_gesture.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {return gestureDetector.onTouchEvent(event);}});}/** * 手势监听动作 */private class getstureListener implements GestureDetector.OnGestureListener{/** * 用户按下屏幕就会触发 */@Overridepublic boolean onDown(MotionEvent e) {mLog.i("1 onDown");return false;}/** * 如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行 * 瞬间多长? */@Overridepublic void onShowPress(MotionEvent e) {mLog.i("1 onShowPress");}/** * 一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发, * 当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件 * 触发顺序: * 点击一下非常快的(不滑动)Touchup: * onDown->onSingleTapUp->onSingleTapConfirmed * 点击一下稍微慢点的(不滑动)Touchup: * onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed */@Overridepublic boolean onSingleTapUp(MotionEvent e) {mLog.i("1 onSingleTapUp");return false;// 仅执行一次,返回true}/** * 在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法 * 滑屏:手指触动屏幕后,稍微滑动后立即松开 * onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling * 拖动:onDown------》onScroll----》onScroll------》onFiling */@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {mLog.i("1 onScroll");return false;}/** * 长按触摸屏,超过一定时长,就会触发这个事件 * 触发顺序:onDown->onShowPress->onLongPress */@Overridepublic void onLongPress(MotionEvent e) {mLog.i("1 onLongPress");}/** * 滑屏,用户按下触摸屏、快速移动后松开, * 由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发 * e1:第1个ACTION_DOWN MotionEvent * e2:最后一个ACTION_MOVE MotionEvent * velocityX:X轴上的移动速度,像素/秒 * velocityY:Y轴上的移动速度,像素/秒 */@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {mLog.i("1 onFling");return false;}}/** * 双击 */private class getstureListener2 implements GestureDetector.OnDoubleTapListener{@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {mLog.i("2 onSingleTapConfirmed");return false; // true if the event is consumed, else false}@Overridepublic boolean onDoubleTap(MotionEvent e) {mLog.i("2 onDoubleTap");return false;}@Overridepublic boolean onDoubleTapEvent(MotionEvent e) {mLog.i("2 onDoubleTapEvent");return false;}}/** * SimpleOnGestureListener类本身已经实现了 上两个接口的所有函数,只是里面全是空的 */private class getstureListener3 extends GestureDetector.SimpleOnGestureListener{// 就是上面三个的所有}}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/tv_main_gesture" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="30dp" android:background="#ffff0000"/></RelativeLayout>
好了。具体详解,请看连接,里面说的比我细,而且清晰。我只是做一些自己的总结。以及把注释放到自己喜欢看的地方
http://blog.csdn.net/harvic880925/article/details/39520901
0 0
- 151020_example_GestureDetector详解
- 详解
- 详解
- 详解
- 详解
- &,&&,|,||详解
- 详解
- Scala详解--------基础知识详解
- Spring详解-----------事务详解
- github 详解详解
- InputFilter详解、TextWatcher详解
- Spring详解-----------事务详解
- 【词汇详解】事务详解
- Session 详解
- Session 详解
- sizeof详解
- 端口详解
- Meta详解~~~
- Spring入门经典——互动出版网
- 第八周--顺序串算法
- sql server中dense_rank和row_number
- Linux 性能分析相关概念(来自IBM红皮书)
- JVM 垃圾回收器工作原理及使用实例介绍
- 151020_example_GestureDetector详解
- IO流
- 调研内容(算法相关--MDP)
- Xml、XmlPullparser解析数据Android
- Java中的Arrays工具类的应用复习
- java中静态代码块的用法 static用法详解
- [Django1.8]sessions
- delphi文件加密测试
- JVM参数