可以考虑创建扩展GridView
和SlidingDrawer
和使用的onInterceptTouchEvent
和onTouchEvent
自定义实现为GridView
和自定义视图只是onInterceptTouchEvent
为SlidingDrawer
自定义实现。您可能不需要实施这取决于用户交互可在handle
触发您的自定义GridView
定制SlidingDrawer
,给它这样也许定义的接口:
public interface MyGridViewListener {
public boolean shouldPreventScroll();
}
回报,如果您的自定义SlidingDrawer
被打开。此返回值将用于确定是否应在GridView
上执行操作(对于onInterceptTouchEvent
和onTouchEvent
方法)。因此,当打开SlidingDrawer
时,在GridView
上执行的操作不会触发SlidingDrawer
上的任何操作。
活动:
MyGridView gridView = (MyGridView) findViewById(R.id.gridView);
gridView.setMyGridViewListener(new MyGridViewListener() {
@Override
public boolean shouldPreventScroll() {
return slidingDrawer.isOpened();
}
});
MyCustomGridView:每当一些触摸/跟踪事件的发生GridView
shouldIntercept
将被调用。
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;
}
我希望这点你在正确的方向,或至少帮助
有用的想法。它给了我一个想法,在自定义的'SlidingDrawer'中重写'open()'并发出一个堆栈跟踪,这导致了在接受的答案中描述的解决方案。 –