4

Возможно ли установить настраиваемые цветные маркеры в API Карт Google версии 2? У меня есть белый ресурс, и я хочу применить к нему цветовой фильтр. Я пробовал:Пользовательские цветные рисунки как маркер карты в API Карт Google v2 - Android

String color = db.getCategoryColor(e.getCategoryId()); 
Drawable mDrawable = this.getResources().getDrawable(R.drawable.event_location); 
mDrawable.setColorFilter(Color.parseColor(Model.parseColor(color)),Mode.SRC_ATOP); 
map.addMarker(new MarkerOptions().position(eventLocation) 
    .title(e.getName()).snippet(e.getLocation()) 
    .icon(BitmapDescriptorFactory.fromBitmap(((BitmapDrawable) mDrawable).getBitmap()))); 

но он не работает. Он показывает только белый маркер без пользовательского цвета. Значение строки цвета, которое я передаю setColorFilter(), имеет форму «#RRGGBB».

ответ

13

Настроить ответ здесь: https://groups.google.com/forum/#!topic/android-developers/KLaDMMxSkLs Цветной фильтр, который вы применяете к Drawable, не применяется непосредственно к растровому изображению, он применяется к Paint, используемому для рендеринга растрового изображения. Таким образом, модифицированный рабочий код будет выглядеть следующим образом:

String color = db.getCategoryColor(e.getCategoryId()); 
Bitmap ob = BitmapFactory.decodeResource(this.getResources(),R.drawable.event_location); 
Bitmap obm = Bitmap.createBitmap(ob.getWidth(), ob.getHeight(), ob.getConfig()); 
Canvas canvas = new Canvas(obm); 
Paint paint = new Paint(); 
paint.setColorFilter(new PorterDuffColorFilter(Color.parseColor(Model.parseColor(color)),PorterDuff.Mode.SRC_ATOP)); 
canvas.drawBitmap(ob, 0f, 0f, paint); 

... и теперь мы можем добавить ОВМ как цветной маркер на карте:

map.addMarker(new MarkerOptions().position(eventLocation) 
    .title(e.getName()).snippet(e.getLocation()) 
    .icon(BitmapDescriptorFactory.fromBitmap(obm)));