6

古いアプリケーションを v1 から v2 に変換していますが、マーカー アイコンの色に問題があります。基本的な白いアイコンがあり、色を付ける必要があります。

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 マーカーはアイコンのドローアブルを受け入れないため、次のようにドローアブルをビットマップに変換することを考えました。

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)));

しかし、何らかの理由で、それは機能していません。アイコンは白のままです。誰でも理由を知っていますか?

前もって感謝します。

4

3 に答える 3

6

OK、これが私が一日の終わりにそれをした方法です:

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)));
于 2013-05-06T12:15:22.950 に答える
1

ドローアブルが 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 an から実行する必要がある場合は、 (を呼び出すために) Activitya も渡す必要があることに注意してください。代わりにオブジェクトも渡します。Contextcontext.getResources().getDisplayMetrics()DisplayMetrics

于 2013-05-02T14:41:53.770 に答える
0

この DrawableUtils が何をしているのかはわかりませんが、BitmapDrawable にキャストしています。それは本当に BitmapDrawable ですか?

任意のタイプのドローアブルからビットマップを抽出するコードを次に示します。

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 がない場合、私の回答は適切です。ただし、そうする場合は、代わりに彼の答えを使用してください。

于 2013-04-16T12:44:42.037 に答える