如何在android中禁用视图的垂直滚动?

Din*_*dha 1 android

在我的Android应用程序中.我有一个全景视图,在这个视图中我想避免只垂直滚动.所以我使用onTouchEvent(MotionEvent event)方法禁用它 .

听到的是代码.

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if( event.getAction()==MotionEvent.ACTION_UP){
        Log.d(TAG, "onTouchEvent:ACTION_UP");
        return false;
    }else if(event.getAction()==MotionEvent.ACTION_DOWN){
        Log.d(TAG, "onTouchEvent:ACTION_DOWN");     
        return false;
    }else{
        Log.d(TAG, "onTouchEvent:ACTION_UNKWON");
        return super.onTouchEvent(event);
    }

}
Run Code Online (Sandbox Code Playgroud)

但它也禁止水平滚动.我怎么能解决这个问题?

Ada*_*nos 6

我想你误解了ACTION_DOWN和的概念ACTION_UP.

ACTION_DOWN意味着当您的手指触摸触摸屏时,ACTION_UP是指您从触摸屏上抬起手指.

也就是说,您可以指示ACTION_DOWN运动事件已开始,ACTION_MOVE从坐标检查触摸事件的方向,并决定是否要阻止运动,并重置变量ACTION_UP.

float startX
float startY;   

@Override
public boolean onTouchEvent(MotionEvent event) {

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        startX = event.getX();
        startY = event.getY();
        break;
    case MotionEvent.ACTION_MOVE:
        float currentX = event.getX();
        float currentY = event.getY();

        float diffX = Math.abs(currentX - startX);
        float diffY = Math.abs(currentY - startY);

        // The purpose of the +100 is to make sure that we have a big enough
        // difference between the 2 directions, eg. it's not diagonal
        if(diffY > diffX + 100){
            return false;
        }
        break;
    case MotionEvent.ACTION_POINTER_UP:

        break;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)