1

私の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);
    }

}

しかし、水平方向のスクロールも無効になります.どうすればこれを解決できますか??

4

2 に答える 2

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;
}
于 2012-07-26T07:08:12.537 に答える
1

パノラマビューでこれがどのように機能するかはわかりませんが、他のビューでは、GestureDetectorを使用してスクロール/フリングの動きをキャッチしました(スクロールは非常に短い動きであるため、通常はフリングを使用します)。

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY){
   if (Math.abs(distanceY) > Math.abs(distanceX))
    return true;// mark the vertical scroll as handled and do nothing
   return false;
}

もう1つのオプションは、onTouchEventを使用することですが、ACTION_MOVEで、垂直スクロールがあることを検出する必要があります(paradxが言ったように)。

それが役に立てば幸い:)

于 2012-07-26T07:17:57.870 に答える