PolylineOptions .color() 不起作用



我正在尝试使用以下代码在地图的折线上设置红色:

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)
    }

最新更新