2012-10-11 5 views
2

일부 지역에 대한 디스패치 터치를 사용 중지하려면 내 화면을 이해하십시오.화면의 일부에서 디스패치 터치 이벤트를 사용 중지하는 방법

enter image description here

당신은 이미지의 머리글, 바닥 글 및지도보기를 볼 수 있지만 나는 위치 버튼 (헤더 오른쪽)를 클릭 할 때 (이 감동있어 같은), 내지도도 통보지고 난 몰라하는 필요. 버튼의 onClick 이벤트 만 클릭해야합니다. 어떤 도움이 크게 감사합니다

<?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> 

:

여기 내 XML이다. 바닥 버튼에서지도보기로

답변

7

당신은 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); 
} 
+0

헤이 덕분에이 대답에 대한 대답 –

+0

죄송 work..but하지 않은 덕분에 작동하는 경우에 당신의 대답을 받아 다시 곧 –

+0

일에 대한 –

0

을 사용하여 상대 레이아웃은 상단에 클릭 ..하고 버튼

사용자가 화면을 터치했다
2

지도보기가 dispatchTouchEvent() 이벤트를받는 이유는 안드로이드가 마지막으로 추가 된 뷰의 이벤트를 dispacthing 시작한다는이며,이 처리되어 있지 않은 경우, 다음은 하나 전에 마지막으로 추가 된 뷰에 파견하고, 그래서 에 ...

xml 레이아웃에서는 먼저 헤더, MapView 및 마지막 바닥 글을 추가합니다. 따라서 귀하의 경우 이벤트는 먼저 바닥 글로, 그 다음으로 MapView로, 그리고 마지막으로 머리글로 발송됩니다.

당신은이 문제를 해결하는 옵션이 있습니다

  • 가장 간단한지도보기로 시작하고 다른 모든 추가, 레이아웃의 항목 순서를 변경하는 것입니다. 상대 배치를 사용해야 올바르게 배치 할 수 있습니다. 이 MapView는 버튼에 의해 처리되는 이벤트를 보지 않습니다.
  • 레이아웃을 유지하고 MapView가 이벤트를 수신하도록하십시오. MapView는 이벤트를 처리해야하는지 또는 무시해야하는지 테스트해야합니다. 이를 위해 @Nunu가 제공하는 코드를 사용할 수 있습니다. 단추 Y 좌표에 단추 높이를 추가해야 할 수도 있습니다.

행운을 빕니다.

+0

+1 좋은 설명을 위해서 Upvote를 누르지 않으면 아무도 나를 막을 수 없다. 많이 감사합니다. –

+0

나는 당신의 답을 고맙게 생각하고 있습니다.:) :) –

+0

@ Luis..thanks again 두 번째 옵션 (@Nunu가 제안한)을 따르지 만 작동하지 않습니다. :(버튼 높이에 y 좌표를 추가하면 무슨 뜻입니까?) thanks to advance –

0

다른보기 위에보기 장소를 가져 오려면 view.bringToFront()를 사용하십시오. answer..i'll에 대한

관련 문제