1

Bir SupportMapFragment var ve here gibi bir kullanıcı çizilen çizgi çizmeye çalışıyorum, bu soruları kabul etmek için izin veriyor gibi görünüyor Alternatif Yöntem 2'yi kullanarak kabul edilen yanıtı kullanmaya çalışıyorum FrameLayout'taki SupportMapFragment. Ancak, benim için işe yaramayacağım. Bu MapFragment ait Görünümü gibi görünüyor düzgün dokunma olaylarını tüketen beni engelleyen true olarak ayarlanmış requestDisallowInterceptTouchEvent() vardır, ama harita parçasını içermeyen ekranın parçaları dokunma etkinliklerini tüketebilir. Burada gördüğüm bütün sorular yapmak istediğim şeyin tersini yapıyor gibi görünüyor. MainActivity.onCreate() içindeGoogleMap Fragmanı Blokları Özel Dokunma Etkinlikleri

<LinearLayout> 
    <FrameLayout 
     android:id="@+id/fram_map" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:id="@+id/mapFrag" tools:context=".MapsActivity" 
     android:name="com.google.android.gms.maps.SupportMapFragment" /> 


    </FrameLayout> 

</LinearLayout> 

MapFragment Ayarı:

İşte (kök LinearLayout bu ilgili olmayan diğer viewgroups içerir) haritaya benim xml kod alakalı

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.mapFrag); 

mapFragment.getMapAsync(this); 

Ben

FrameLayout fram_map = (FrameLayout) findViewById(R.id.fram_map); 

     fram_map.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, @NonNull MotionEvent event){ 

      float startX; 
      float startY; 
      float endX; 
      float endY; 
      switch (event.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        startX = event.getX(); 
        startY = event.getY(); 
        LatLng pt = mMap.getProjection().fromScreenLocation(new Point((int) startX,(int) startY)); 
        System.out.println("Start: " + pt.toString()); 
        break; 
       case MotionEvent.ACTION_MOVE: 
        //check for difference in prev once 
        endX = event.getX(); 
        endY = event.getY(); 
        System.out.println("Moving: " + endX); 
        break; 
       case MotionEvent.ACTION_UP: 
        endX = event.getX(); 
        endY = event.getY(); 
        System.out.println("Stop: " + endX); 
        break; 
      } 
      return true; 
     }}); 

Ben dokunduğumda benim logCat olsun Tümü: dokunma olayları tüketmek çalışıyorum

D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN 

cevap

1

Sorun harita parçası FrameLayout içeride olmasıdır: Harita alanını (I .setScrollGesturesEnabled() devre dışı). , System.out.println() kullanmak yerine Log kullanmayın, bir öneri olarak, aynı zamanda

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/mapFrag" 
     tools:context=".MapsActivity" 
     android:name="com.google.android.gms.maps.SupportMapFragment" /> 

    <FrameLayout 
     android:id="@+id/fram_map" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</FrameLayout> 

: Sen düzenini değiştirmek gerekir. Örneğin: Log.e("MOTION", "Start: " + pt.toString());

+0

Bu cevap sorunuzunuzu çözdü mü? – antonio

+0

Evet, çözümünüz çalışıyor, ancak harita üzerinde yakınlaştırma özelliğini devre dışı bırakır. Harita çizmem gerektiğinde düzeni program aracılığıyla değiştirmem gerekiyor mu? –

+0

Evet, görünümünüzün davranışını 'View.OnTouchListener' öğenizde false döndürme davranışını program aracılığıyla değiştirmeniz gerekir veya' MotionEvent 'öğesini' map.dispatchTouchEvent (motionEvent) 'kullanarak eşleştirebilirsiniz; – antonio