Override public void drawCanvas canvas MapView mapView boolean shadow superdrawcanvas mapView shadow; 绘制每个标记的旋转角度 for CustomOverlayItem item mItemList Drawable
要优化旋转图片后旋转前的图标不显示的问题,可以在绘制旋转后的图标之前,先清除画布上的内容。可以使用canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)方法来清除画布上的内容。
修改后的代码如下:
@Override public void draw(Canvas canvas , MapView mapView , boolean shadow) { super.draw(canvas, mapView, shadow);
// 绘制每个标记的旋转角度
for (CustomOverlayItem item : mItemList) {
Drawable marker = item.getMarker(0); // 获取标记的图标
float rotation = item.getRotation(); // 获取标记的旋转角度
if (marker instanceof BitmapDrawable && rotation != 0) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) marker;
Bitmap bitmap = bitmapDrawable.getBitmap();
// 创建一个旋转后的图标
Matrix matrix = new Matrix();
matrix.postRotate(rotation);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
// 清除画布上的内容
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// 绘制旋转后的图标
canvas.save();
IGeoPoint iGeoPoint = item.getPoint();
Point screenPts = mapView.getProjection().toPixels(iGeoPoint, null);
canvas.translate(screenPts.x- (rotatedBitmap.getWidth() / 2), screenPts.y- (rotatedBitmap.getHeight() / 2));
canvas.drawBitmap(rotatedBitmap, 0, -40, null);
canvas.restore();
}
}
}
这样,绘制旋转后的图标之前会先清除画布上的内容,确保旋转前的图标不会显示出来
原文地址: https://www.cveoy.top/t/topic/hJSS 著作权归作者所有。请勿转载和采集!