Мне нужно нарисовать текст на специальном маркере, которых довольно много.Но проблема в том, что когда я рисую текст в Переопределенном при рисовании, весь текст элементов наложения выглядит находящимся на одном слое над маркерами и не выглядит синхронизированным при увеличении или уменьшении карты.Раньше я вызывал заполнение при добавлении каждого элемента, и это работало нормально, но это было слишком медленно.Любая помощь?
В моем пользовательском классе, который расширяется от ItemizedOverlay, конструктор выглядит следующим образом, где я устанавливаю пользовательский маркер:
public HotelMapFilterOverlay(Drawable defaultMarker, final Context con) {
super(boundCenterBottom(defaultMarker));
this.marker = defaultMarker;
this.con = con;
}
, а переопределенный метод рисования выглядит следующим образом:
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
Bitmap bmp = ((BitmapDrawable) marker).getBitmap();
Paint textPaint = new Paint();
textPaint.setColor(Color.WHITE);
textPaint.setTextSize(16f);
textPaint.setTypeface(Typeface.create(Typeface.SANS_SERIF, 1));
textPaint.setStyle(Paint.Style.FILL);
Point screenPts = new Point();
float bmpWidth = bmp.getWidth();
float bmpHeight = bmp.getHeight();
float left;
float top;
int total = mOverlayItems.size();
for (int index = 0; index < total; index++) {
gp = mOverlayItems.get(index).getPoint();
mapView.getProjection().toPixels(gp, screenPts);
left = screenPts.x - (bmpWidth / 2);
top = screenPts.y - bmpHeight;
// draw text
this.title = mOverlayItems.get(index).getTitle();
canvas.drawText(this.title, left + 8, top + 30,textPaint);
}
}
и я звоню населению только один раз, чтобы сделать это эффективным, как
public void callPopulate(){
populate();
}