H

requestDisallowInterceptTouchEventViewGroupを使用する場合



Use Requestdisallowintercepttouchevent Viewgroup



開発プロセスで発生する可能性のある問題が何であれ、次のようになります。

1は、スライドするScrollViewスリッピングリストに垂直方向にネストされたScrollViewを引き起こす可能性があり、スリッピングリストのドラッグは垂直方向のスライディングエクスペリエンスを低下させる



2、クロススライドネストリストViewPager、ドラッグスリッピングリストが同様にタブViewPagerをハンドオーバーに導く可能性がある場合。

requestDisallowInterceptTouchEventは一般的なメソッドViewGroupクラスであり、パラメーターはブール値であり、以下で説明します。



子供がこの親とその祖先が ViewGroup.onInterceptTouchEvent(MotionEvent) でタッチイベントをインターセプトすることを望まない場合に呼び出されます。

この親は、この呼び出しを親に渡す必要があります。この親は、タッチの間、この要求に従わなければなりません(つまり、この親がアップまたはキャンセルを受け取った後にのみフラグをクリアします。

Androidシステムでは、ワンクリックイベントが親ビューから子ビューに渡されます。各レイヤーのビューは、クリックイベントをインターセプトして処理するか、次のレベルに渡すかを決定できます。子ビューがクリックイベントを処理しない場合は、イベントが渡されると、親ビューによって父が表示し、クリックイベントを処理するかどうかを決定します。このメソッドを設定して親ビューに通知し、クリックイベントを処理することによって、サブビューでインターセプトされないでください。親は、イベントが終了するまで、要求に対するこのビューのクリックを受け入れる必要があります。



実用的なアプリケーションは、サブビューの親ViewGroup ontouchイベントのインスタンスに挿入し、requestDisallowInterceptTouchEventを呼び出してクリックイベントを停止し、親ビューをインターセプトできます。

public boolean onTouch(View v, MotionEvent event) { ViewGroup viewGroup = (ViewGroup) v.getParent() switch (event.getAction()) { case MotionEvent.ACTION_MOVE: viewGroup.requestDisallowInterceptTouchEvent(true) break case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: viewGroup .requestDisallowInterceptTouchEvent(false) break } }