gpt4 book ai didi

android - 拦截触摸事件 SlidingPaneLayout

转载 作者:搜寻专家 更新时间:2023-11-01 08:02:37 26 4
gpt4 key购买 nike

我有一个带有 SlidingPaneLayout 的 Activity,里面有两个 fragment :一个 ListView 在左边,一个 MapFragment 在左边正确的。如何拦截产生的触摸事件,使用户可以在不关闭面板的情况下移动 map ?

我想用来关闭/打开右侧面板的唯一区域是前四分之一。在该区域的右侧,我想移动 map 。

谢谢

编辑2:

好的,现在我想出了如何正确地子类化 SlidingPaneLayout,现在的问题是如何正确捕获触摸事件:

@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN
&& event.getX() > (getWidth() / 6)) {
return false;
}
return super.onTouchEvent(event);
}

使用此代码我无法滑动 map ,它保持固定。问题是我只想在选择右侧面板时拦截触摸(换句话说,只有在显示 map 时)。

最佳答案

SlidingPaneLayout 有自己的触摸监听器,因此当您通过调用 setOnTouchListener(父类(super class) View 中的方法)重置它时,您将失去所有特定于 SlidingPaneLayout 的 onTouch 行为。

-------------------------------

这里是一个尝试:制作你自己的 SlidingPaneLayout :
构造函数应该是这样的,以便在 xml 布局中使用您的 View

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

关于android - 拦截触摸事件 SlidingPaneLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18933157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com