およびのカスタム実装と、のカスタム実装を拡張GridView
およびSlidingDrawer
使用するカスタムビューを作成することを検討してください。でトリガーされる可能性のあるユーザーインタラクションによっては、カスタムを実装する必要がない場合があります。onInterceptTouchEvent
onTouchEvent
GridView
onInterceptTouchEvent
SlidingDrawer
SlidingDrawer
handle
カスタムGridView
の場合は、次のように定義されたインターフェイスを指定します。
public interface MyGridViewListener {
public boolean shouldPreventScroll();
}
カスタムSlidingDrawer
が開いている場合は戻ります。この戻り値は、でアクションを実行する必要があるかどうか(onInterceptTouchEvent
およびonTouchEvent
メソッド)を決定するために使用されGridView
ます。したがって、SlidingDrawer
が開かれると、で実行されたアクションはでGridView
何もトリガーしませんSlidingDrawer
。
アクティビティ:
MyGridView gridView = (MyGridView) findViewById(R.id.gridView);
gridView.setMyGridViewListener(new MyGridViewListener() {
@Override
public boolean shouldPreventScroll() {
return slidingDrawer.isOpened();
}
});
MyCustomGridView:
shouldIntercept
でタッチ/トラックイベントが発生するたびに呼び出されGridView
ます。
private boolean shouldIntercept() {
boolean shouldIntercept = false;
if(myGridViewListener != null) {
shouldIntercept = myGridViewListener.shouldPreventScroll();
}
return shouldIntercept;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return shouldIntercept() ? true : super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return shouldIntercept() ? true : super.onTouchEvent(ev);
}
@Override
public boolean onTrackballEvent(MotionEvent event) {
return shouldIntercept() ? true : super.onTrackballEvent(event);
}
public MyGridViewListener getMyGridViewListener() {
return myGridViewListener;
}
public void setMyGridViewListener(
MyGridViewListener myGridViewListener) {
this.myGridViewListener = myGridViewListener;
}
これがあなたを正しい方向に向けるか、少なくとも助けになることを願っています