我有一个带有SlidingPaneLayout的活动,里面有两个片段:左边是ListView,右边是MapFragment。如何能够拦截所生成的触摸事件,以便用户可以在不关闭面板的情况下移动地图?
我想用来关闭/打开右边面板的唯一区域是第一个第四个。在那个地区的右边,我想移动地图。
谢谢
EDIT2:
好了,现在我知道了如何正确地子类SlidingPaneLayout,现在的问题是如何正确捕获触摸事件:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN
&& event.getX() > (getWidth() / 6)) {
return false;
}
return super.onTouchEvent(event);
}有了这段代码,我无法滑动地图,它仍然是固定的。问题是,只有在选择正确的面板时(换句话说,只有在显示地图时),我才想拦截触摸。
发布于 2013-09-21 13:54:26
SlidingPaneLayout有自己的触摸侦听器,所以当您通过调用setOnTouchListener (这是超类视图中的一个方法)来重置它时,您就失去了特定于SlidingPaneLayout的所有onTouch行为。
-------------------------------下面是一个尝试:创建您自己的SlidingPaneLayout:
构造函数应该是这样的,以便在xml布局中使用视图。
public class MySlidingPaneLayout extends SlidingPaneLayout{
public MySlidingPaneLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event){
if (event.getX() < widthPIX / 6) {
return super.onTouchEvent(event);// here it works as a normal SlidingPaneLayout
}
return false; // here it returns false so that another event's listener should be called, in your case the MapFragment listener
}
}在代码中添加MySlidingPaneLayout代替
发布于 2013-09-21 15:00:55
我最终解决了这个问题:如果SlidingPaneLayout是关闭的还是打开的(在我的例子中,我有一个布尔字段值" open "),只要覆盖这个方法和控制就行了。
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (!homeActivity.open && event.getX() > (getWidth() / 5)) {
return false;
}
return super.onInterceptTouchEvent(event);
}https://stackoverflow.com/questions/18933157
复制相似问题