我正在尝试使用以下代码在地图的折线上设置红色:
PolylineOptions rectOptions = new PolylineOptions();
rectOptions.color(R.color.colorPrimary);
String[][] lineInformation = ((MyApplication)getApplication()).getLineInformation(line);
for (int i=0; i<lineInformation.length; i++){
rectOptions.add(new LatLng(Double.parseDouble(lineInformation[i][0]),Double.parseDouble(lineInformation[i][1])));
}
但它不起作用,它不是显示我的应用程序的 primaryColor 是红色,而是显示带有一些 alpha 的深色。
我遵循了官方指南:https://developers.google.com/maps/documentation/android-api/shapes
您的问题是由颜色资源标识符和颜色值之间的混淆引起的,两者都是int
s。
让我们看一下PolylineOptions.color()
的文档:
public PolylineOptions color (int color)
将折线的颜色设置为 32 位 ARGB 颜色。默认颜色为黑色 (
0xff000000
(。
由于文档声明输入应该是"32 位 ARGB 颜色",因此不能只传递颜色资源 ID;必须先手动将其解析为颜色值。
R.color.colorPrimary
是一个具有一些自动生成值的int
,也许类似于 0x7f050042
.不幸的是,这可以解释为ARGB颜色,并且将是部分透明的,极深的蓝色。因此,该应用程序不会崩溃,您只会在折线上获得意想不到的颜色。
若要获取正确的颜色,请使用 ContextCompat.getColor()
将颜色资源 ID 解析为颜色值,然后将颜色值传递给 color()
方法:
Context c = /* some context here */
int colorPrimary = ContextCompat.getColor(c, R.color.colorPrimary);
rectOptions.color(colorPrimary);
您还可以使用预定义的Java"Color"类来获取一些标准颜色并使用它来传递给地图。
例如
PolylineOptions rectOptions = new PolylineOptions();
<p>rectOptions.color(Color.BLUE);</p>
为绘制折线调用此方法,您可以为折线添加任何颜色
fun drawPolyline(color: Int, list: ArrayList<LatLng>, googleMap: GoogleMap,width:Float): Polyline {
val options = PolylineOptions().width(width)
.color(color)
.geodesic(true)
for (z in list.indices) {
val point = list[z]
options.add(point)
}
return googleMap.addPolyline(options)
}