3

我想禁用某些区域的调度触摸,以便您理解这里是我的屏幕。

在此处输入图像描述

您可以在图像中看到页眉、页脚和地图视图,但是当我单击位置按钮(页眉右侧)时,我的地图也会收到我不想要的通知(就像它被触摸一样)。我希望只单击按钮的 onClick 事件而不是调度事件。

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<!-- include title bar for all screen -->

<include
    android:id="@+id/include1"
    layout="@layout/titlebar_layout"
    android:layout_gravity="top" />



<FrameLayout
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.88" 
    >

    <com.google.android.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.63"
        android:apiKey="0VkXbAOFvAq7b6uaGHSmnS2a2VosPxoS6ceHY_g"
        android:clickable="true" >
    </com.google.android.maps.MapView>


</FrameLayout>

<include
    android:id="@+id/include2"
    android:layout_gravity="bottom"
    android:layout_marginBottom="38dp"
    layout="@layout/bottom_layout" />

</LinearLayout>

任何帮助将不胜感激。

4

4 回答 4

8

您可以覆盖dispatchTouchEvent, 并检查用户触摸屏幕的位置..

  @Override
public boolean dispatchTouchEvent(MotionEvent ev) {     
    //first check if the location button should handle the touch event
    if(locBtn != null) {
        int[] pos = new int[2];
        locBtn.getLocationOnScreen(pos);
        if(ev.getY() <= (pos[1] + locBtn.getHeight()) && ev.getX() > pos[0]) //location button event
            return locBtn.onTouchEvent(ev);
    }
        return super.dispatchTouchEvent(ev);
}
于 2012-10-11T07:03:34.980 回答
2

MapView 接收dispatchTouchEvent()事件的原因是 Android 开始为最后一个添加的视图分发事件,如果它没有在那里处理,那么它被分派到最后一个在该视图之前添加的视图,依此类推......

在您的 xml 布局中,您首先添加页眉,然后添加 MapView,最后添加页脚。因此,在您的情况下,事件首先被发送到页脚,然后发送到 MapView,最后发送到页眉。

您必须选择解决此问题:

  • 最简单的方法是重新排列布局中的项目,从 mapview 开始,然后添加所有其他项目。您可能需要使用相对布局才能正确定位它们。使用此 MapView 将看不到按钮处理的事件。
  • 保留您的布局并让 MapView 接收事件。MapView 将需要测试事件是否应该由他处理或忽略。为此,您可以使用@Nunu 建议的代码,它应该可以工作。也许您需要在按钮 Y 坐标中添加按钮高度。

祝你好运。

于 2012-10-11T11:08:59.417 回答
0

使用相对布局,底部有地图视图,顶部有点击按钮。并为按钮添加点击事件

于 2012-10-11T07:03:17.760 回答
0

使用 view.bringToFront() 获取高于其他视图的视图位置。

于 2013-02-12T08:59:41.893 回答