Bir google harita parçası için bir onDrive Dinleyicisi kurmaya çalışıyorum, ancak sürükleme etkinliğinin tetiklenmesini sağlayamıyorum. Harita doğrudan sürükleme etkinliklerini desteklemediğinden, Görünüm için bir sürükle dinleyici kullanmaya çalışıyorum. OnMarkerDrag olayı hakkında biliyorum, ama bu bana iyi bir şey yapmıyor çünkü işaretçileri hareket ettirmeye çalışmıyorum.Google Map v2 Fragmanı için OnDragListener Oluşturma
harita sürükleme yakalama olayları nedeni iki yönlüdür: kullanıcı haritayı panned ise
İlk algılamak için. Eğer yapmadılarsa, ekranda yerlerini saklamayı ve haritada bulunmuyorsa konumlarına animasyon yapmayı severim. Haritayı kaydırmışlarsa, ekranda görmek istediklerini ve ekrana zorlamak istediklerini biliyorlar. (bu, API'ye dahil edilmesi gereken bir şey gibi görünüyor)
Yakalamanın ikinci sebebi, kullanıcıların haritada çizgiler ve çokgenler çizmesine izin vermektir. Bunu onTap olayları ile yapabilirim (puan ekleyerek), ama serbest bırakmalarını da isterim.
Benim kod şöyle görünür:
MainActivity:
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
setUpMapIfNeeded();
mMapView = findViewById(R.id.map);
myMapDragListener = new MapDragListener();
mMapView.setOnDragListener(myMapDragListener);
Dinleyici:
public class MapDragListener implements OnDragListener {
/**
*
*/
public MapDragListener() {
super();
say.logCat("MapDragListener: I'm ALIVE!!!!");
}
private AkamaiAnnounce say = new AkamaiAnnounce();
private boolean inDrag;
private boolean hasPanned=false;
@Override
public boolean onDrag(View v, DragEvent event) {
say.logCat("MapDragListener.onDrag: " + event.toString());
//String dotTAG = (String) getTag();
if (event.getLocalState() != this) {
return false;
}
boolean myResult = true;
int action = event.getAction();
float x = event.getX();
float y = event.getY();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
inDrag = true;
break;
case DragEvent.ACTION_DRAG_LOCATION:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
myResult = false;
break;
case DragEvent.ACTION_DRAG_ENDED:
inDrag = false; // change color of original dot back
hasPanned=true;
break;
default:
myResult = false;
break;
}
return false;
//return myResult;
}
public boolean hasPanned() {
return hasPanned;
}
public void setHasPanned(boolean hasPanned) {
this.hasPanned = hasPanned;
}
}
haritası çalışıyor. Dinleyici ortaya çıkar, ancak onDrag etkinliğim asla patlamaz. Herhangi bir fikir?
haritası kirli olmadığını anlatmak için bir BehaviorSubject kullanarak benzer gibi bir şey yaptım v2 kesinlikle sürükleme dinleyicileri var. 'OnMarkerDragListener' öğelerini kullanın – tyczj
@tyczj Bu, işaretçileri sürüklemeyle değil, tüm haritayı kaydırmakla ilgilidir. Tim: Bu işe yaramaz çünkü harita olayları tüketir. Sorunuzu güncelleyin, neyi başarmak istediğinizi söyleyin ve belki bir çözüm bulabiliriz. –