繁体   English   中英

将Drawable转换为位图以更改Google Maps Android API v2中标记的颜色

[英]Converting a Drawable to a Bitmap to change the color of a Marker in Google Maps Android API v2

我正在将一个旧的应用程序从v1转换为v2,我的Marker图标的颜色有问题。 我有一个基本的白色图标,它需要着色。

在v1中,我这样做了:

Drawable d = DrawableUtils.resizeImageToDrawable(
    MapViewFragment.mapviewActivity,
    Configuration.Display.getDrawableFix(i),
    Configuration.MapView.getWaypointIconWidth(),
    Configuration.MapView.getWaypointIconHeight());
d.setColorFilter(color, Mode.MULTIPLY);

overlay = new MyFplnFixListItimizedOverlay(d);

由于v2 Markers不接受Drawables的图标,我想将Drawable转换为Bitmap,如下所示:

Drawable d = DrawableUtils.resizeImageToDrawable(
    MapViewFragment.mapviewActivity,
    Configuration.Display.getDrawableFix(i),
    Configuration.MapView.getWaypointIconWidth(),
    Configuration.MapView.getWaypointIconHeight());
d.setColorFilter(color, Mode.MULTIPLY);

Bitmap icon = ((BitmapDrawable) d).getBitmap();

Marker marker = MapViewFragment.map.addMarker(new MarkerOptions()
    .position(point)
    .title(Integer.toString(fplnType))
    .visible(true)
    .icon(BitmapDescriptorFactory.fromBitmap(icon)));

但由于某种原因,它不起作用。 图标保持白色。 谁知道为什么?

提前致谢。

好的,这就是我在一天结束时的表现:

Drawable d = DrawableUtils.resizeImageToDrawable(
                    MapViewFragment.mapViewActivity,
                    Configuration.Display.getDrawableFix(i),
                    Configuration.MapView.getWaypointIconWidth(),
                    Configuration.MapView.getWaypointIconHeight());
d.setColorFilter(color, Mode.MULTIPLY);

Bitmap b = ((BitmapDrawable) d).getBitmap();
Canvas myCanvas = new Canvas(b);

int myColor = b.getPixel(0,0);
ColorFilter filter = new LightingColorFilter(myColor, color);

Paint pnt = new Paint();
pnt.setColorFilter(filter);
myCanvas.drawBitmap(b,0,0,pnt);

Marker marker = MapViewFragment.map.addMarker(new MarkerOptions()
    .position(point)
    .title(Integer.toString(fplnType))
    .visible(true)
    .icon(BitmapDescriptorFactory.fromBitmap(b)));

如果您的drawable未在XML中定义,则可以使用此方法执行此操作:

protected Bitmap fromDrawable(final Drawable drawable, final int height, final int width) {
        final int widthDip = (int) TypedValue.applyDimension(1, width, getResources()
                .getDisplayMetrics());
            final int heightDip = (int) TypedValue.applyDimension(1, width, getResources().getDisplayMetrics());
        final Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return bitmap;
    }

请注意,如果您需要从OUTSIDE和Activity ,则还需要传递Context (以便调用context.getResources().getDisplayMetrics() )。 您也可以传递DisplayMetrics对象。

我不确定这个DrawableUtils正在做什么,但你将它转换为BitmapDrawable。 它真的是BitmapDrawable吗?

这里是一些从任何类型的drawable中提取Bitmap的代码:

Drawable d = // make sure it's not null
d.setBounds(0, 0, width, height);
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
d.draw(c);

我们的想法是在可变位图上创建一个画布,并在画布上绘制可绘制的画布

编辑:

我刚看到@Analizer的答案,是的,如果你没有Drawable作为资源,我的答案是好的。 但如果你这样做,请改为使用他的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM