0
私はこの問題を抱えていますが、私はgooglemapの項目の位置を実際に決めていますが、地図...mi googlemapの項目の位置を更新しますが、移動または地図のズームを行ったときに再描画されます
私はpossitionsが更新されましたたびに、彼らは、私はそれを行うことができますどのように
私の指でそれを移動したり、ズームすることなく、地図上の再描画を取得することをしたいですか?それは、すべての完全な再描画を行い、インターネットからマップを再ダウンロードする必要があるため
無効化は...、答えではありません
私のコード:
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
}
}
私はmapView.invalidate()で解決しました。すべてのマップを再描画せず、アイテムのみを再描画します。 – NullPointerException