MontionEvent、VelocityTracker

//系统所能识别的滑动的最小距离,
// 如果两次滑动之间的距离小于这个值,则系统不会认为你在进行滑动操作,
// 不同的设备这个值会不同
int scaledTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();

    //追踪手指在滑动时候的速度(一段时间内手指锁划过的像素数)
    obtain = VelocityTracker.obtain();

    one.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //相对于View左上角的座标
                    float x = motionEvent.getX();float y = motionEvent.getY();
                    //相对于View左上角的座标
                    float rawX = motionEvent.getRawX();float rawY = motionEvent.getRawY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    obtain.addMovement(motionEvent);
                    obtain.computeCurrentVelocity(1000);//单位毫秒
                    float xVelocity = obtain.getXVelocity();float yVelocity = obtain.getYVelocity();
                    break;
                case MotionEvent.ACTION_UP:
                    break;
                default:
                    break;
            }
            //当setOnTouchListener和setOnclickListener一起使用,onTouch为true,则不会执行onClick方法,为false的才会执行onClick方法。无论是true还是false,down,move,up这三个方法都会执行
            //当setOnTouchListener单独使用时,为false的时候,只会执行down方法,不会执行move和up.只有在true的时候,三个都会执行。
            return true;
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //重置,回收
    obtain.clear();
    obtain.recycle();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章