zoukankan      html  css  js  c++  java
  • MotionEvent android使用

    在Android的View中,手势检测用于辅助检测用户单击、滑动、长按、双击等行为。我们这篇文章主要介绍如何使用它:

    一、GestureDetector.OnGestureListener

    1、我们可以通过这个接口监听一些手势

    代码如下:

    public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
    
        private static final String TAG = "MainActivity";
        private GestureDetector gestureDetector;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            gestureDetector = new GestureDetector(this);
    
        }
    
        public MainActivity() {
            super();
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
    
            return gestureDetector.onTouchEvent(event);
        }
        
        
    
        @Override
        public boolean onDown(MotionEvent e) {
    
            Log.i(TAG, "onDown: 点击了");
            return false;
        }
    
        @Override
        public void onShowPress(MotionEvent e) {
    
        }
    
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Log.i(TAG, "onSingleTapUp: 点击了");
            return false;
        }
    
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            Log.i(TAG, "onScroll: 点击了");
            return false;
        }
    
        @Override
        public void onLongPress(MotionEvent e) {
    
        }
    
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            Log.i(TAG, "onFling: 点击了");
            return false;
        }
    }

    如果我们是单点之后可以看到日志:

     滑动的日志:

     长点击:

     都可以检测到。

    2、滑动的速度检测

    在onTouchEvent(这个是属于View的,你也可以在GestureDetector.OnGestureListener接口中写)中我们可以加入速度检测的代码:

            VelocityTracker obtain = VelocityTracker.obtain();
            obtain.addMovement(event);
    
            obtain.computeCurrentVelocity(100);
    
            int xVelocity = (int) obtain.getXVelocity();
            int yVelocity = (int) obtain.getYVelocity();
            obtain.clear();
            obtain.recycle();
            Log.i(TAG, "onTouchEvent:x速度: "+xVelocity);
            Log.i(TAG, "onTouchEvent:y速度: "+yVelocity);

    这样手势滑动的时候就可以检测到速度,这里我设置的时间是100ms。速度=(终点位置-起点位置)/时间段

     其中上下左右的滑动不同,速度值为正负;

  • 相关阅读:
    块存储、文件存储、对象存储的区别
    brk 和 sbrk 区别
    【转】海量数据处理:十道面试题与十个海量数据处理方法总结
    C++ STL 里为什么不维护一个 size 成员变量?
    C++对象内存分布详解(包括字节对齐和虚函数表)
    虚函数实现原理
    关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    Jerasure 1.2A 中的 C 函数 tips
    C++ qsort() 函数调用时实参与形参不兼容的问题解决
    C语言位运算符:与、或、异或、取反、左移与右移详细介绍
  • 原文地址:https://www.cnblogs.com/hequnwang/p/14284234.html
Copyright © 2011-2022 走看看