Detect swipe using onTouchListener in ScrollView

前端 未结 3 1497
春和景丽
春和景丽 2021-01-05 15:24

I\'m using the following code to detect swipe in my Activity:

getWindow().getDecorView().getRootView().setOnTouchListener(new OnTouchListener() {
                    


        
3条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-05 16:04

    mSlop = ViewConfiguration.get(getActivity()).getScaledTouchSlop();
    boolean mIsSwiping = false;
    
    public boolean onTouch(View v, MotionEvent event) {
        //Timber.d("onTouch, v.getId %d, event.getActionMasked %d", v.getId(), event.getActionMasked());
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                mDownX = event.getX();
                mDownY = event.getY();
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mIsSwiping = false;
                break;
            case MotionEvent.ACTION_MOVE:
                float deltaX = event.getX() - mDownX;
                float deltaY = event.getY() - mDownY;
                if (!mIsSwiping && Math.abs(deltaX) > mSlop && Math.abs(deltaY) < mSlop) {
                    mIsSwiping = true;
                    if (deltaX > 0) {
                        Timber.d("swipe from left to right, slop %d", mSlop);
                        // TODO:
                    } else {
                        Timber.d("swipe from right to left");
                        // TODO:
                    }
                    return true;
                } else if (!mIsSwiping && Math.abs(deltaY) > mSlop) {
                    mIsSwiping = true;
                    Timber.d("swipe vertical");
                    return true;
                }
    
        }
        return false;
    }
    

提交回复
热议问题