2013-04-16 17 views
6

Eski bir uygulamayı v1'den v2'ye dönüştürüyorum ve Marker simgelerinin rengiyle ilgili bir sorun yaşıyorum. Temel, beyaz bir simgem var ve renklendirilmeli.Google Maps Android API v2'de bir İşaretleyicinin rengini değiştirmek için bir Bitmap'e Dönüştürme Dönüştürme

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))); 
: v2 İşaretleyiciler onların simgeler için Drawables kabul etmiyoruz yana

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

, böyle bir Bitmap çekilebilir dönüştürme hakkında düşündü: v1 olarak

, ben bu şekilde yaptım

Ama bir sebepten dolayı çalışmıyor. Simgeler beyaz kalır. Herkes nedenini biliyor mu?

Şimdiden teşekkürler.

cevap

6

Tamam, burada günün sonunda öyle yapmıştım: Bir çekilebilir için DrawableUtils döküm değilim

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

Paylaşım için teşekkürler. OutOfMemoryExceptions ile uğraştın mı? – sealskej

0

Bu DrawableUtils'in ne yaptığından emin değilim, ancak bir BitmapDrawable'a dönüştürüyorsunuz. Gerçekten BitmapDrawable mı? Burada

çekilebilir her türlü dışında bir Bitmap ayıklamak için bazı kod:

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

fikir kesilebilir bir bitmap üzerinde bir tuval oluşturmak ve tuval

düzenlemek o çizilebilir çizmek olmasıdır :

Sadece @Analizer yanıtını gördüm ve evet, bir kaynak olarak Çizilebilir olmuyorsa, cevabım iyi. Ama eğer yaparsan, cevabını yerine kullan.

+0

, sadece belli bir boyuta çekilebilir yeniden boyutlandırmak için kullanıyorum. Ayrıca, tavsiyeleriniz için teşekkür ederim, ama "display" ve "config" için ne koymam gerektiği konusunda kafam karıştı. – Apoz

+0

Üzgünüm, biraz daha açıklamalıydım ve ayrıca bir hata vardı (güncellenmiş kodu kontrol et). Yapılandırma, aşağıdaki seçeneklerden herhangi biri olabilir: https://developer.android.com/reference/android/graphics/Bitmap.Config.html ve buradaki seçenekleri https://developer.android.com/reference /android/util/DisplayMetrics.html Ekran, görüntü metrikleri alabiliyor ve ben zaten Bitmap'i ekrana önceden ölçeklendirdiğini düşünüyorum, ancak bunu kendiniz için bir tahmin olarak görmeniz gerekecek. Ancak düzenlemede de görebileceğiniz gibi, ekran olmadan sadece yapım yapabilirsiniz. – Budius

+0

Ama şimdi ne yapacağım? Bitmap'i işaretleyicimin simgesi olarak doğrudan kullanmalı mıyım? Denedim ve çalışmıyor, işaretçi göstermiyor. – Apoz

1

sizin çekilebilir bir XML tanımlı değil ise, bu yöntemle bunu yapabilir: Bir Activity DIŞINDA onu yapmak gerekirse, bir de geçmesi gerekeceğini

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

Not

Context ( context.getResources().getDisplayMetrics() numaralı telefonu aramak için). Bunun yerine DisplayMetrics nesnesini de geçirin.