Как я могу использовать пользовательское растровое изображение для точки «Вы здесь» в MyLocationOverlay? - PullRequest
2 голосов
/ 16 апреля 2009

Я поливал документы и не смог понять это. Это вообще возможно?

Пожалуйста, смотрите это

Ответы [ 2 ]

15 голосов
/ 16 апреля 2009

Похоже, правильный механизм для этого - расширить MyLocationOverlay, а затем переопределить защищенный метод drawMyLocation ().

Следующее использует стрелку, чтобы показать, где «вы» и в каком направлении «вы» указывают:

</p> <pre><code>package com.example; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Point; import android.location.Location; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; public class MyCustomLocationOverlay extends MyLocationOverlay { private Context mContext; private float mOrientation; public MyCustomLocationOverlay(Context context, MapView mapView) { super(context, mapView); mContext = context; } @Override protected void drawMyLocation(Canvas canvas, MapView mapView, Location lastFix, GeoPoint myLocation, long when) { // translate the GeoPoint to screen pixels Point screenPts = mapView.getProjection().toPixels(myLocation, null); // create a rotated copy of the marker Bitmap arrowBitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.arrow_green); Matrix matrix = new Matrix(); matrix.postRotate(mOrientation); Bitmap rotatedBmp = Bitmap.createBitmap( arrowBitmap, 0, 0, arrowBitmap.getWidth(), arrowBitmap.getHeight(), matrix, true ); // add the rotated marker to the canvas canvas.drawBitmap( rotatedBmp, screenPts.x - (rotatedBmp.getWidth() / 2), screenPts.y - (rotatedBmp.getHeight() / 2), null ); } public void setOrientation(float newOrientation) { mOrientation = newOrientation; } }

2 голосов
/ 01 октября 2010

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

Я изменил

matrix.postRotate(mOrientation);

для

matrix.postRotate(this.getRotation());

и добавлено в конец:

mapView.postInvalidate();

чтобы перерисовать стрелку при ее изменении

...