可以考慮創建擴展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()'併發出一個堆棧跟蹤,這導致了在接受的答案中描述的解決方案。 –