Я обновляю позиции элементов mi googlemap, но они перекрашиваются только при перемещении или увеличении карты - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть эта проблема, я на самом деле позиционирую позиции элементов mi googlemap, но они перекрашиваются только при перемещении или масштабировании карты ...

Я хочу, чтобы каждый раз, когда варианты обновлялись, ониперекрасить на карте, не перемещая и не увеличивая ее пальцем

как я могу это сделать?

сделать недействительным - не ответ, потому что он полностью перерисовывает все и требуетзаново загрузить карту из интернета ...

мой код:

public class Locate extends MapActivity{   

private TextView userText = null;
private TextView permissionText = null;
private TextView lastUpdateText = null;
private Button locateButton = null;
private Button traceButton = null;
private MapView mapView = null;
List<Overlay> mapOverlays = null;
double lat;
double lng;
GeoPoint p;
MapController mc;

Drawable drawable;
Drawable drawable2;
MyItemizedOverlay itemizedoverlay;
MyItemizedOverlay itemizedoverlay2;

//para almacenar la config local de mi app, mostrarme o no en el mapa...
static SharedPreferences settings;
static SharedPreferences.Editor configEditor;

//private MyLooper mLooper;

////////////////////////////////////////MANEJADOR SIMILAR A UN HILO, QUE ME PERMITE RECOGER MI POSICION ACTUAL Y ACTUALIZARLA EN EL MAPA UNA VEZ CADA 5 SEGUNDOS
private Handler mHandler;
private Runnable updateRunnable = new Runnable() {
    @Override public void run() {
        itemizedoverlay2.clear();
        updateMyPosition();
        queueRunnable();
    }
};
private void queueRunnable() {
    mHandler.postDelayed(updateRunnable, 5000);
}
/////////////////////////////////////////FIN MANEJADOR

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.locate);

    userText = (TextView) findViewById(R.id.User);
    permissionText= (TextView) findViewById(R.id.Permission);
    lastUpdateText= (TextView) findViewById(R.id.LastUpdate);
    locateButton = (Button) findViewById(R.id.locate);
    traceButton = (Button) findViewById(R.id.trace);
    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    mapOverlays = mapView.getOverlays();
    mc = mapView.getController();

    settings=PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
    configEditor = settings.edit();

    drawable = this.getResources().getDrawable(R.drawable.minifriend); // Icono de la cara, para posiciones de mis amigos
    drawable2 = this.getResources().getDrawable(R.drawable.miniicon2); // Icono del programa, para mi posicion GPS
    itemizedoverlay = new MyItemizedOverlay(drawable, this); // Aqui almaceno otras posiciones gps
    itemizedoverlay2 = new MyItemizedOverlay(drawable2, this); // Aqui almaceno mi posicion gps

    if (this.getIntent().getExtras() != null) /// si he recibido datos del friend en el Bundle
    {
        updateFriendPosition();
    }

    if (settings.getBoolean("showMeCheckBox", true))
    {
        updateMyPosition();
    }


    locateButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Perform action on clicks
            //itemizedoverlay2.getItem(0).
            itemizedoverlay.clear();
            updateFriendPosition();
            itemizedoverlay2.clear();
            updateMyPosition();
        }
    });

    traceButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Perform action on clicks             
        }
    }); 

    ///////////////////////////////////////////////////////////////////////////////////////////
    /// CODIGO PARA QUITAR EL FOCO DEL PRIMER TEXTEDIT Y QUE NO SALGA EL TECLADO DE ANDROID ///
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    ///////////////////////////////////////////////////////////////////////////////////////////

    //Thread thread = new Thread(this);
    //thread.start();

    //mLooper = new MyLooper();
    //mLooper.start();

    ////////////////////////////////////////MANEJADOR SIMILAR A UN HILO, QUE ME PERMITE RECOGER MI POSICION ACTUAL Y ACTUALIZARLA EN EL MAPA UNA VEZ CADA 5 SEGUNDOS
    mHandler = new Handler();
    queueRunnable();
    /////////////////////////////////////// FIN MANEJADOR

}
private void updateFriendPosition() 
{
    Bundle bundle = this.getIntent().getExtras();//get the intent & bundle passed by X
    userText.setText(bundle.getString("user"));
    permissionText.setText(bundle.getString("permission"));
    lastUpdateText.setText(bundle.getString("lastupdate"));
    String coordinates[] = {bundle.getString("lat"), bundle.getString("lon")};  
    lat = Double.parseDouble(coordinates[0]);
    lng = Double.parseDouble(coordinates[1]);
    p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
    OverlayItem overlayitem1 = new OverlayItem(p, bundle.getString("user"), "Hi Friend!");
    itemizedoverlay.addOverlay(overlayitem1);
    mapOverlays.add(itemizedoverlay);// dibujo la estrella con la posicion actual del friend

    mc.animateTo(p); ///nos centra el mapa en la posicion donde esta nuestro amigo
    mc.setZoom(10);  /// ajusta el zoom a 10        
}
public void updateMyPosition()
{
    Object LOCK = new Object();
    synchronized (LOCK){
    String coordinates[] = {settings.getString("mylatitude", null),settings.getString("mylongitude", null)};    
    lat = Double.parseDouble(coordinates[0]);
    lng = Double.parseDouble(coordinates[1]);
    p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
    OverlayItem overlayitem1 = new OverlayItem(p, "Me", "My Position");
    itemizedoverlay2.addOverlay(overlayitem1);
    mapOverlays.add(itemizedoverlay2);//dibujo mi icono para mostrarme a mi
    }
}

1 Ответ

2 голосов
/ 19 ноября 2010

Вы изменяете список наложений карты.Из документации getOverlays () :

Если вы измените список, вы, вероятно, захотите вызвать View.postInvalidate(), чтобы изменение стало видимым для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...