Autore Topic: Overlay: cancellare un vecchio punto  (Letto 624 volte)

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Overlay: cancellare un vecchio punto
« il: 19 Maggio 2011, 09:46:23 CEST »
0
Ciao a tutti: sto gestendo una MapView che deve ogni volta che clicco su un punto impostarmi una puntina su quel punto e visualizzarmi un toast con le coordinate.
Il problema è che il toast me lo mostra correttamente mentre la posizione della puntina rimane quella che avevo inserito come primo punto e non riesco piu a cambiarla... Lascio il mio codice..
Codice (Java): [Seleziona]
public class Map_forPoint extends MapActivity implements OnTouchListener {

        MapView map;
        MapController mapCtrl;
        List<Overlay> mapOverlays;
        GeoPoint initialGeoPoint;
        GeoPoint savedGeoPoint;
        Button savePointButton;
        Button switchButton;
        boolean switchFirst = true;
        boolean switchTouch = false;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.map);

                map = (MapView) findViewById(R.id.mapView);
                mapOverlays = map.getOverlays();
                mapCtrl = map.getController();

                // Rendiamo la mappa cliccabile e quindi ne permettiamo il pan
                map.setClickable(true);

                // Utiliziamo i controlli predefiniti per la gestione delle operazioni
                // di zoom
                map.setBuiltInZoomControls(true);

                initialGeoPoint = new GeoPoint(45422552, 12062302); // imposto la vista
                                                                                                                        // all'avvio

                mapCtrl.animateTo(initialGeoPoint);
                mapCtrl.setZoom(11);

                map.invalidate();

                savePointButton = (Button) findViewById(R.id.bu_savePoint);
                savePointButton.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                                String pkg = getPackageName();
                                Intent resultIntent = new Intent();
                                resultIntent.putExtra(pkg + ".myGeoPointLat", savedGeoPoint.getLatitudeE6());
                                resultIntent.putExtra(pkg + ".myGeoPointLon", savedGeoPoint.getLongitudeE6());
                                setResult(Map_forPoint.RESULT_OK, resultIntent);
                                finish();
                        }
                });

                switchButton = (Button) findViewById(R.id.bu_switchTouch);
                switchButton.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                                if (!switchTouch) {
                                        setTouchable(map);
                                        switchTouch = true;
                                        switchButton.setText("Move");
                                } else {
                                        setNotTouchable(map);
                                        switchTouch = false;
                                        switchButton.setText("Set Point");
                                }
                        }
                });
        }

        private void setTouchable(MapView map) {
                map.setOnTouchListener(this);
        }

        private void setNotTouchable(MapView map) {
                map.setOnTouchListener(null);
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        savedGeoPoint = map.getProjection().fromPixels((int) event.getX(),
                                        (int) event.getY());
                        Toast.makeText(getBaseContext(), savedGeoPoint.getLatitudeE6() / 1E6 + "," + savedGeoPoint.getLongitudeE6() / 1E6,Toast.LENGTH_SHORT).show();
                        savePointButton.setVisibility(View.FOCUS_UP);
                        mapOverlays.clear();                                              //CON QUESTE DUE RIGHE NON DOVREBBE
                        mapOverlays.add(new MapOverlay());              //CANCELLARMI LA PUNTINA VECCHIA E INSERIRMI QUELLA NUOVA??

                        map.invalidate();
                }
                return false;
        }

        class MapOverlay extends Overlay {

                public MapOverlay() {
                }

                public void draw(Canvas canvas, MapView mapView, boolean shadow) {
                        super.draw(canvas, mapView, shadow);

                        // translate the GeoPoint to screen pixels
                        Point screenPoint = new Point();
                        mapView.getProjection().toPixels(initialGeoPoint, screenPoint);

                        Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                                        R.drawable.map_pin);
                        canvas.drawBitmap(bmp, screenPoint.x - 12, screenPoint.y - 48, null);
                }
        }

        @Override
        protected boolean isRouteDisplayed() {
                return false;
        }

}


Spero possiate aiutarmi!  ;-)
Ciao!
« Ultima modifica: 19 Maggio 2011, 14:25:55 CEST da cadupper »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Overlay: cancellare un vecchio punto
« Risposta #1 il: 19 Maggio 2011, 11:47:11 CEST »
0
il codice java va messo nel tag JAVA. dai su, hai 43 post in attivo, ormai dovresti saperlo!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Overlay: cancellare un vecchio punto
« Risposta #2 il: 19 Maggio 2011, 14:27:38 CEST »
0
il codice java va messo nel tag JAVA. dai su, hai 43 post in attivo, ormai dovresti saperlo!

fatto!! scusate!!   :-P :-P qualcuno sa consigliarmi una soluzione al mio problema...?

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Overlay: cancellare un vecchio punto
« Risposta #3 il: 19 Maggio 2011, 14:55:00 CEST »
0
Ho risolto:
Praticamente andava a posizionarmi la puntina sempre su initialGeoPoint, nonostante gli dicessi di andare sulla savedGeoPoint.... o_OAllora ho rinominato entrambe le variabili in currentGeoPoint e ora va benissimo!

Solo una cosa: come maa al momento di inserire una puntina se dopo aver fatto clik su un punto della mappa, subito dopo clikko da un altra parte mi cambia la posizione della puntina? E soprattutto perchè dopo due secondi dal primo posizionamento non lo fa piu?...  o_O