zoukankan      html  css  js  c++  java
  • Android studio Gestures(手势)

    1.Android中手势交互的执行顺序

    • 1.手指触碰屏幕时,触发MotionEvent事件!
    • 2.该事件被OnTouchListener监听,可在它的onTouch()方法中获得该MotionEvent对象!
    • 3.通过GestureDetector转发MotionEvent对象给OnGestureListener
    • 4.我们可以通过OnGestureListener获得该对象,然后获取相关信息,以及做相关处理!

    我们来看下上述的三个类都是干嘛的: MotionEvent: 这个类用于封装手势、触摸笔、轨迹球等等的动作事件。 其内部封装了两个重要的属性X和Y,这两个属性分别用于记录横轴和纵轴的坐标。 GestureDetector: 识别各种手势。 OnGestureListener: 这是一个手势交互的监听接口,其中提供了多个抽象方法, 并根据GestureDetector的手势识别结果调用相对应的方法。

    ——上述资料摘自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html

    2.GestureListener详解:

    从1中我们知道了监听手势的关键是:GestureListener 他给我们提供了下述的回调方法:

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

    知道了GestureListener的相关方法后,实现手势检测也很简单,步骤如下:

    • Step 1: 创建GestureDetector对象,创建时需实现GestureListener传入
    • Step 2: 将Activity或者特定组件上的TouchEvent的事件交给GestureDetector处理即可! 我们写个简单的代码来验证这个流程,即重写对应的方法:

    代码如下:

    public class MainActivity extends AppCompatActivity {
    
        private MyGestureListener mgListener;
        private GestureDetector mDetector;
        private final static String TAG = "MyGesture";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //实例化GestureListener与GestureDetector对象
            mgListener = new MyGestureListener();
            mDetector = new GestureDetector(this, mgListener);
    
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            return mDetector.onTouchEvent(event);
        }
    
        //自定义一个GestureListener,这个是View类下的,别写错哦!!!
        private class MyGestureListener implements GestureDetector.OnGestureListener {
    
            @Override
            public boolean onDown(MotionEvent motionEvent) {
                Log.d(TAG, "onDown:按下");
                return false;
            }
    
            @Override
            public void onShowPress(MotionEvent motionEvent) {
                Log.d(TAG, "onShowPress:手指按下一段时间,不过还没到长按");
            }
    
            @Override
            public boolean onSingleTapUp(MotionEvent motionEvent) {
                Log.d(TAG, "onSingleTapUp:手指离开屏幕的一瞬间");
                return false;
            }
    
            @Override
            public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                Log.d(TAG, "onScroll:在触摸屏上滑动");
                return false;
            }
    
            @Override
            public void onLongPress(MotionEvent motionEvent) {
                Log.d(TAG, "onLongPress:长按并且没有松开");
            }
    
            @Override
            public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                Log.d(TAG, "onFling:迅速滑动,并松开");
                return false;
            }
        }
    
    }

    对应操作截图:

    • 1.按下后立即松开:
    • 2.长按后松开:
    • 3.轻轻一滑,同时松开:
    • 4.按住后不放持续做滑动操作:
  • 相关阅读:
    【Rust】结构体 struct
    【Rust】所有权、引用、借用
    Centos7升级glibc2.24
    ES用户权限控制
    PHP压缩html网页代码 : 清除空格,制表符,注释标记
    PHP通过HTTP_USER_AGENT判断是否为手机移动终端的函数
    php正则表达式替换URL链接地址为指定url的形式
    PHP下使用CURL方式POST数据至API接口的方法
    设计模式代理模式
    设计模式生成器模式
  • 原文地址:https://www.cnblogs.com/mjhjl/p/14902417.html
Copyright © 2011-2022 走看看