• TouchSlop与VelocityTracker认识


    TouchSlop是处理触摸事件中的一个常量,被系统认为滑动和点击事件的临界点理 解这个touchSlop是一个滑动距离值的常量,也就是说当我们手触摸在屏幕上滑动时,如果滑动距离没有超过touchSlop值的话 ,android系统本身是不会认为我们在屏幕上做了手势滑动,因此只有当我们在屏幕上的滑动距离超过touchSlop值时,android系统本身才 会认为我们做了滑动操作并去响应触摸事件,不过要注意的是不同的设备,touchSlop的值可能是不同的,一切以函数获取为准。

    在各家手机系统默认值是不同的

    通过:ViewConfiguration.get(getContext()).getScaledTouchSlop() 获取系统的滑动常量来,判断此时是否属于滑动事件

    其中ViewConfiguration这个类主要定义了UI中所使用到的标准常量,像超时、尺寸、距离

    在处理滑动事件时,其实可以利用这个值来过滤掉一些没必要的动作,比如当两次滑动距离小于这个值时,我们就可以认为滑动没发生,从而更好的优化用户体验。

    VelocityTracker是个速度跟踪类,用于跟踪手指滑动的速度,包括x轴方向和y轴方向的速度。如快速滑动或者其他手势操作。当我们准备开始跟踪滑动速率时可以使用obtain()方法来获取一个 VelocityTracker的实例,然后在onTouchEvent回调函数中,使用addMovement(MotionEvent)函数将当前的 移动事件传递给VelocityTracker对象。当我们决定计算当前触摸点的速率时可以调用computeCurrentVelocity(int units)函数来计算当前的速度,使用getXVelocity() getYVelocity()函数来获得当前X轴和Y轴的速度。

    使用例子:

     @Override  

        public boolean onTouchEvent(MotionEvent event) {  

            LogUtils.e("onTouchEvent start!!");  

            Log.i(TAG, "ACTION_DOWN");  

            if(null == mVelocityTracker) {  

                mVelocityTracker = VelocityTracker.obtain();  

            }  

            mVelocityTracker.addMovement(event);  

            final VelocityTracker verTracker = mVelocityTracker;  

            switch (event.getAction()) {  

                case MotionEvent.ACTION_DOWN:  

                    //获取第一个触点的id, 此时可能有多个触点,获取其中一个  

                    mPointerId = event.getPointerId(0);  

                    break;  

                case MotionEvent.ACTION_MOVE:  

                    //计算瞬时速度  

                    verTracker.computeCurrentVelocity(1000, mMaxVelocity);  

                    float velocityX = verTracker.getXVelocity(mPointerId);  

                    float velocityY = verTracker.getYVelocity(mPointerId);  

                    LogUtils.e("velocityX-->" + velocityX);  

                    LogUtils.e("velocityY-->"+velocityY);  

                    break;  

                case MotionEvent.ACTION_UP:  

                case MotionEvent.ACTION_CANCEL:  

                    releaseVelocityTracker();//释放资源  

                    break;  

                default:  

                    break;  

            }  

            return super.onTouchEvent(event);  

        }  

        /** 

         * 使用完VelocityTracker,必须释放资源 

         */  

        private void releaseVelocityTracker() {  

            if (mVelocityTracker != null) {  

                mVelocityTracker.clear();  

                mVelocityTracker.recycle();  

                mVelocityTracker = null;  

            }  

        }  

     

  • 相关阅读:
    活久见!Jmeter也能实现文件传输和发送邮件啦
    震惊!资深测试开发已经不用postman测试接口了!
    app测试日志如何获取,logcat值得拥有
    TestNG学会了,Java单元测试你就掌握了一半
    超实用:精准衡量接口测试覆盖率
    Reviewboard用户指南(1.3)—— Getting Started: General Workflow
    Reviewboard用户指南(1.2)—— Getting Started: What is Code Review?
    Reviewboard用户指南(1.4)—— Getting Started: Account Settings
    Reviewboard管理员指南(4.1)—— Overview of the Administration UI
    Reviewboard用户指南(6.4)——Issue Tracking
  • 原文地址:https://www.cnblogs.com/ut2016-progam/p/5341774.html
Copyright © 2020-2023  润新知