Я сделал наложение для моей карты. Я нарисовал маркеры, чтобы показать, где произошли землетрясения, но я пытаюсь нарисовать текст, чтобы показать магнитуду этого землетрясения рядом с маркером. Проблема в том, что текст появляется, но как только вы касаетесь карты (я думаю, что это происходит, когда выполняется onDraw для наложения), текст исчезает. Вот мой код. Любой будет принят с благодарностью. Вот мой код:
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;
public class EarthquakeOverlay extends Overlay {
Context c;
int counter = 0;
Cursor earthquakes;
ArrayList<GeoPoint> quakeLocations;
ArrayList<String> mags;
int rad = 5;
String g;
public EarthquakeOverlay(Cursor cursor, Context con) {
super();
earthquakes = cursor;
c = con;
mags = new ArrayList<String>();
quakeLocations = new ArrayList<GeoPoint>();
refreshQuakeLocations();
}
public void swapCursor(Cursor cursor) {
earthquakes = cursor;
refreshQuakeLocations();
}
private void refreshQuakeLocations() {
quakeLocations.clear();
if (earthquakes != null && earthquakes.moveToFirst())
do {
int magIndex = earthquakes
.getColumnIndexOrThrow(EarthquakeProvider.KEY_MAGNITUDE);
String mag = earthquakes.getString(magIndex);
mags.add(mag);
int latIndex = earthquakes
.getColumnIndexOrThrow(EarthquakeProvider.KEY_LOCATION_LAT);
int lngIndex = earthquakes
.getColumnIndexOrThrow(EarthquakeProvider.KEY_LOCATION_LNG);
Double lat = earthquakes.getFloat(latIndex) * 1E6;
Double lng = earthquakes.getFloat(lngIndex) * 1E6;
GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue());
quakeLocations.add(geoPoint);
} while (earthquakes.moveToNext());
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
Projection projection = mapView.getProjection();
Bitmap flag = BitmapFactory.decodeResource(c.getResources(),
R.drawable.marker);
Paint bitmapPaint = new Paint();
bitmapPaint.setFilterBitmap(false);
bitmapPaint.setAntiAlias(true);
Point globalPoint = new Point();
// Create and setup your paint brush
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
paint.setFakeBoldText(true);
if (shadow == false) {
for (GeoPoint point : quakeLocations) {
Point myPoint = new Point();
projection.toPixels(point, myPoint);
globalPoint = myPoint;
if (c != null) {
canvas.drawBitmap(flag, myPoint.x - rad, myPoint.y - rad,
bitmapPaint);
if(mags.isEmpty()){
// do nothing
}else{
canvas.drawText(mags.get(0), myPoint.x - rad, myPoint.y - rad,
paint);
mags.remove(0);
}
}// end of if stetment
}// end of quakeLocations for statment
}
}
}