9

ViewPager 内に水平 ScrollView があります。ScrollView の最後に達したときに ViewPager がスクロールされないようにするために、SO のヒントに従ってこのクラスを使用します。

public class CustomScrollView extends HorizontalScrollView {

public CustomScrollView(Context p_context, AttributeSet p_attrs) {
    super(p_context, p_attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent p_event) {

    return true;
}

@Override
public boolean onTouchEvent(MotionEvent p_event) {


    if (p_event.getAction() == MotionEvent.ACTION_MOVE
            && getParent() != null) {
        getParent().requestDisallowInterceptTouchEvent(true);
    }

    return super.onTouchEvent(p_event);
}
}

そのonInterCeptTouchEventビューへのクリックとその中のすべてを消費するようです。私がそれに入れたときViewsScrollView彼らOnClickListenerの は呼び出されません。

onInterceptTouchEventfalse を返すとOnClickListener、 が呼び出されますが、ScrollViewスクロールできません。

その中にクリック可能なビューを配置するにはどうすればよいScrollViewですか?

編集:Rotemの答えを実装した後、onClickListener動作しますが、クリックイベントだけでなく、フリングなどの他のイベントでも発生します。どうすればこれを防ぐことができますか?

4

3 に答える 3

11

onTouchEventの実装内で呼び出してからonInterceptTouchEventfalse を返すようにしてください。

于 2013-04-15T14:48:20.243 に答える
5

さて、バウンティを開始してから数分後、その仕組みがわかりました。

onInterceptTouchEvent私 では

return super.onInterceptTouchEvent(p_event);
于 2013-04-23T11:32:32.793 に答える