2016-01-22 2 views
3

Как установить пользовательский значок маркеров с динамическим цветом, изменить только зеленую зону цвета с динамическим цветомнабора иконки карты маркер с динамическим цветом в андроиде

googleMap.addMarker(new MarkerOptions() 
           .position(latLng) 
           .visible(true) 
          .icon(BitmapDescriptorFactory.fromBitmap(changeBitmapColor(color)))); 

// здесь установка динамического цвета на иконку маркеров

private Bitmap changeBitmapColor(int color) { 
     Bitmap sourceBitmap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.pin_def); 
     Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0, 
       sourceBitmap.getWidth() - 1, sourceBitmap.getHeight() - 1); 

     Paint p = new Paint(); 
     ColorFilter filter = new LightingColorFilter(color, 0); 
     p.setColorFilter(filter); 

     Canvas canvas = new Canvas(resultBitmap); 
     canvas.drawBitmap(resultBitmap, 0, 0, p); 


     return resultBitmap; 
    } 

// его рабочий, но он также меняет белый цвет. Как избежать этого и изменить только зеленый цвет и сохранить центральную область белого, как есть. Спасибо.

enter image description here

ответ

3

я достичь, следующим образ. Я использовал два отдельных изображения (с логотипом и без логотипа одинакового размера), изображение с логотипом прозрачно и объединило их в одно, чтобы выглядеть как одно изображение.

googleMap.addMarker(new MarkerOptions() 
             .position(latLng) 
             .visible(true).snippet(String.valueOf(i)) 
             .icon(BitmapDescriptorFactory.fromBitmap(changeBitmapColor(color)))); 



private Bitmap changeBitmapColor(int color) { 

     Bitmap ob = BitmapFactory.decodeResource(this.getResources(), R.drawable.pin_fill); 
     Bitmap obm = Bitmap.createBitmap(ob.getWidth(), ob.getHeight(), Bitmap.Config.ARGB_8888); 
     Bitmap overlay = BitmapFactory.decodeResource(this.getResources(), R.drawable.pin_trans); 
     Bitmap overlaym = Bitmap.createBitmap(overlay.getWidth(), overlay.getHeight(), Bitmap.Config.ARGB_8888); 


     Canvas canvas = new Canvas(overlaym); 
     Paint paint = new Paint(); 
     paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)); 
     canvas.drawBitmap(ob, 0f, 0f, paint); 
     canvas.drawBitmap(overlay, 0f, 0f, null); 
     return overlaym; 
    } 
+0

ли вы разделить второе изображение, я хочу, чтобы понять, какой из прозрачного изображения, чтобы сделать –

+1

@BaradiBaradari вы можете проверить его здесь https://www.dropbox.com/s/a630at10z8m2laq/pin_fill.png? dl = 0 и https://www.dropbox.com/s/ckdxqee2kxlzon7/pin_trans.png?dl=0 (trans) – Nas