Detect swipe using onTouchListener in ScrollView

前端 未结 3 1487
春和景丽
春和景丽 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;
    }
    
    0 讨论(0)
  • 2021-01-05 16:06

    You must set OntouchListener to ScrollView.

    ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView1);
    scrollView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch(event.getAction()){
                        case MotionEvent.ACTION_DOWN:{
                            downX = event.getX();}
                        case MotionEvent.ACTION_UP:{
                            upX = event.getX();
    
                            float deltaX = downX - upX;
    
                            if(Math.abs(deltaX)>0){
                                if(deltaX>=0){
                                    swipeToRight();
                                    return true;
                                }else{
                                    swipeToLeft();
                                    return  true;
                                }
                            }
                        }
                    }
    
                    return false;
                }
    });
    
    0 讨论(0)
  • 2021-01-05 16:26

    I think this is what you are looking for:

    Swipe event in android ScrollView

    0 讨论(0)
提交回复
热议问题