android - 拦截触摸事件SlidingPaneLayout

标签 android android-fragments touch-event mapfragment slidingpanelayout

我有一个带有 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/

相关文章:

android - 无法从 Eclipse 迁移到 IntelliJ IDEA。这个日志是什么意思?

android - .svg 文件作为 HTML 中的对象未在 Android WebVIew 中显示

android - fragment 中的 GraphView

android - 在 fragment 的 Activity 中实现 SwipeRefreshLayout

javascript - iOS Web App 触摸手势

web - 如果已经滚动(在 iPhone 上),则不会在可滚动 div 上触发 touchstart 事件

android - 如何列出 USB OTG 设备上的文件

android - Phonegap - Android 地理定位不准确

java - 从另一个 fragment 访问时静态 int 数组元素变为 0

iphone - 我可以调出一个带有可触摸背景的 UIActionSheet 吗?