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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章