Sto provando a impostare un Listener onDrag per un frammento di mappa di google, ma non riesco a far scattare l'evento di trascinamento. Poiché la mappa non supporta direttamente gli eventi di trascinamento, sto cercando di implementare un listener di trascinamento per la vista. Conosco l'evento onMarkerDrag, ma questo non mi fa bene visto che non sto cercando di spostare i marcatori.Creazione di OnDragListener per Google Map v2 Frammento
La ragione per la cattura di eventi mappa di trascinamento è duplice:
primo a rilevare se l'utente ha stroncato la mappa. In caso contrario, mi piace mantenere la loro posizione sullo schermo e animare la loro posizione se non è sulla mappa. Se hanno filtrato la mappa, presumo che sappiano cosa vogliono vedere e forzare la posizione sullo schermo. (questo sembra qualcosa che dovrebbe essere incluso nell'API)
Il secondo motivo per il trapping è consentire agli utenti di disegnare linee e poligoni sulla mappa. Posso farlo con gli eventi onTap (aggiungendo punti), ma mi piacerebbe essere in grado di lasciarli anche a mano libera.
Il mio codice è simile al seguente:
mainActivity:
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
setUpMapIfNeeded();
mMapView = findViewById(R.id.map);
myMapDragListener = new MapDragListener();
mMapView.setOnDragListener(myMapDragListener);
The Listener:
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;
}
}
La mappa funziona bene. L'ascoltatore crea un'istanza, ma il mio evento onDrag non si attiva mai. Qualche idea?
se si parla di marcatori trascinando, V2 certamente ha ascoltatori di trascinamento. usa 'implementa OnMarkerDragListener' – tyczj
@tyczj Non si tratta di trascinare i marcatori, ma di esplorare l'intera mappa. Tim: non funzionerà perché la mappa consuma eventi. Aggiorna la tua domanda, dì ciò che vuoi raggiungere e forse possiamo trovare una soluzione. –