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

dispatchTouchEvent()MapView がイベントを受信して​​いる理由は、Android が最後に追加されたビューのイベントのディスパッチを開始し、そこで処理されない場合は、その前に追加された最後のビューにディスパッチされるためです。

あなたのxmlレイアウトでは、最初にヘッダーを追加し、次にMapViewを追加し、最後のフッターを追加します。したがって、あなたの場合、イベントは最初にフッターにディスパッチされ、次にMapViewにディスパッチされ、最後にヘッダーにディスパッチされます。

これを解決するにはオプションが必要です:

  • 最も簡単な方法は、レイアウト内のアイテムを並べ替え、mapview から始めて他のすべてを追加することです。それらを正しく配置するには、相対レイアウトを使用する必要がある場合があります。この MapView では、ボタンによって処理されるイベントは表示されません。
  • レイアウトを維持し、MapView がイベントを受信できるようにします。MapView は、イベントを自分で処理するか無視するかをテストする必要があります。そのためには、@ Nunu によって提案されたコードを使用できます。これは機能するはずです。ボタンの高さをボタンの Y 座標に追加する必要があるかもしれません。

幸運を。

于 2012-10-11T11:08:59.417 に答える
0

view.bringToFront() を使用して、ビューを他のビューの上に配置します。

于 2013-02-12T08:59:41.893 に答える
0

下部にマップビュー、上部にボタンをクリックして相対レイアウトを使用し、ボタンのクリックイベントを追加します

于 2012-10-11T07:03:17.760 に答える