2013-04-16 4 views
6

古いアプリケーションをv1からv2に変換しています。マーカーの色に問題があります。私は基本的な白いアイコンを持っていて、色付けする必要があります。 V1でGoogle Maps Android API v2のマーカーの色を変更するために描画可能なものをビットマップに変換する

、私はそれをこのように行った:

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の変換について考えた:

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

何らかの理由で、動作しません。アイコンは白色のままです。なぜ誰も知っていますか?

ありがとうございます。

答えて

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

共有いただきありがとうございます。あなたはOutOfMemoryExceptionsを処理しなければなりませんでしたか? – sealskej

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を持っていない場合は良いです。しかし、もしあなたがそうしたら、彼の答えを代わりに利用してください。

+0

私はDrawableのにDrawableUtilsをキャストしていないよ、私は特定のサイズに描画可能なサイズを変更するためにそれを使用しています。また、アドバイスをいただきありがとうございますが、私は "display"と "config"のために置くべきものについて混乱しています。 – Apoz

+0

申し訳ありませんが、もう少し説明しておき、間違いがありました(更新コードを確認してください)。 configはhttps://developer.android.com/reference/android/graphics/Bitmap.Config.htmlのオプションから選択でき、https://developer.android.com/referenceからオプションを表示できます/android/util/DisplayMetrics.htmlディスプレイでは、ディスプレイメトリクスを取得できますが、ビットマップをディスプレイにあらかじめスケーリングしておくと思いますが、これは自分の推測と同じように自分でテストする必要があります。しかし、あなたが編集上で見ることができるように、あなたはディスプレイなしでただ建設することができます。 – Budius

+0

しかし、私は次に何をすべきですか?ビットマップをマーカーのアイコンとして直接使用する必要がありますか?私はそれを試して、それは動作していない、マーカーが表示されていません。 – Apoz

1

あなたの描画可能はXMLで定義されていない場合は、この方法でそれを行うことができます:あなたはActivity外からそれを実行する必要がある場合、あなたも合格する必要がありますことを

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

Contextcontext.getResources().getDisplayMetrics()に電話するため)。代わりに DisplayMetricsオブジェクトも渡します。

関連する問題