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
Bu cevap sorunuzunuzu çözdü mü? – antonio
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? –
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