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