要优化旋转图片后旋转前的图标不显示的问题,可以在绘制旋转后的图标之前,先清除画布上的内容。可以使用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();
    }
}

}

这样,绘制旋转后的图标之前会先清除画布上的内容,确保旋转前的图标不会显示出来

Override public void drawCanvas canvas MapView mapView boolean shadow superdrawcanvas mapView shadow; 绘制每个标记的旋转角度 for CustomOverlayItem item mItemList Drawable

原文地址: https://www.cveoy.top/t/topic/hJSS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录