3

私はScrollView別のビューの上にあります(with Buttons)。ScrollViewが画面全体を占有し、その下にあるビューを覆い隠しています。

アプリのある時点で、ScrollViewを無効にして (ただし、表示されたまま)、すべてのタッチ イベントを のButtons下にある に転送する必要がありScrollViewます。どうやってやるの?のようないくつかのビューButtonsは、無効にすると自動的にそれを行いますが、aScrollViewはそれを行いません。

4

3 に答える 3

12

ScrollViewステータス(無効/有効)を示すフラグを持ち、タッチ イベントが を通過できるようにonTouchEventとをオーバーライドする独自の実装を試みてください。次に例を示します。dispatchTouchEventScrollView

public class DisabledScrollView extends ScrollView {

    private boolean mIsDisable = false;

    // if status is true, disable the ScrollView
    public void setDisableStatus(boolean status) {
        mIsDisable = status;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        // no more tocuh events for this ScrollView
        if (mIsDisable) {
            return false;
        }       
        return super.onTouchEvent(ev);
    }

    public boolean dispatchTouchEvent(MotionEvent ev) {
        // although the ScrollView doesn't get touch events , its children will get them so intercept them.
        if (mIsDisable) {
            return false;
        }
        return super.dispatchTouchEvent(ev);
    }

}

あとは、そのフラグの値を変更するだけです。それが機能するかどうかを確認してください。

于 2012-10-11T10:48:11.737 に答える
2

私の場合、ビュー B とオーバーラップしていたビュー A でタッチ イベントを処理し、イベントをビュー B に送信するだけで済みました。両方のビューは同じ RelativeLayout の子でした​​が、ビュー A 間に親子関係はありませんでした。とB.これは私のために働いた:

viewA.setOnTouchListener( new OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {
          // do my stuff here

          viewB.dispatchTouchEvent( event );
        }
}
于 2015-07-13T07:05:07.037 に答える