0

我有一个简单的Android应用程序与谷歌地图显示当前默认标记。这种做法的好处是,我可以简单的更改标记,这在我的情况下,依赖于时间的颜色/色调的标志将“过期”Android谷歌地图:自定义标记为渐变颜色

bitmapDescriptor = BitmapDescriptorFactory.defaultMarker(this.calculateMarkerHue(msg)); 

MarkerOptions markerOptions = new MarkerOptions() 
       .position(new LatLng(...)) 
       .icon(bitmapDescriptor) 
       .title("Title") 
       .snippet("Snippet"); 


private float calculateMarkerHue(Message msg) { 
    float hue = <calculate some value 0.0..360.0 depending on msg> 
    return hue; 
} 

这工作完全正常。但是,现在我想使用自定义标记来支持不同类型的标记。虽然我设法使用其他PNG可绘制来更改标记形状,但我没有成功对颜色进行任何更改。 (不同类型的)drawable,位图,画布,位图描述符的整个概念......我无法得到我的头。

我试过各种我在网上找到的东西,但没有任何工作。要么我得到了铸造错误,空指针异常,或没有错误,但没有关于设置颜色的效果。

回答

1

尝试添加绘制,并通过帆布像画出来:

markerOptions.icon(bitmapFromDrawable(getActivity(), R.drawable.your_gradient)); 

bitmapFromDrawable应该是这样的:

private BitmapDescriptor bitmapFromDrawable(Context context, int vectorResId) { 
     Drawable vectorDrawable = ContextCompat.getDrawable(context, vectorResId); 
     vectorDrawable.setBounds(0, 0, vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight()); 
     Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     vectorDrawable.draw(canvas); 
     return BitmapDescriptorFactory.fromBitmap(bitmap); 
    } 
+0

这工作。我只添加了'vectorDrawable.setColorFilter(color,PorterDuff.Mode.SRC_ATOP);'这个函数,其中'color'是一个'int'参数,我计算并赋予该函数。唯一的问题是,它会改变整个Drawable的颜色......就像预期的那样。默认标记具有很好的特性,即改变颜色不会影响标记的黑色边框和中心点。 – Christian