PolylineOptions .color() 不起作用

Nul*_*ion 2 android polyline google-maps-android-api-2 android-maps-v2 polylineoptions

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

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])));
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,而不是显示我的应用程序的primaryColour 是红色的,而是显示带有一些alpha 的深色。

我按照官方指南:https : //developers.google.com/maps/documentation/android-api/shapes

Ben*_* P. 5

您的问题是由颜色资源标识符颜色值之间的混淆引起的,两者都是ints。

让我们来看看文档PolylineOptions.color()

public PolylineOptions color (int color)

将折线的颜色设置为 32 位 ARGB 颜色。默认颜色为黑色 ( 0xff000000)。

由于文档指出输入应该是“32 位 ARGB 颜色”,因此您不能只传递颜色资源 ID;您必须先手动将其解析为颜色值。

R.color.colorPrimaryint具有一些自动生成的值,可能类似于0x7f050042. 不幸的是,这可以解释为 ARGB 颜色,并且是部分透明的极深蓝色。所以应用程序不会崩溃,你只会在你的折线上得到一个意想不到的颜色。

要获得正确的颜色,请使用ContextCompat.getColor()将您的颜色资源 id 解析为颜色值,然后将颜色值传递给该color()方法:

Context c = /* some context here */
int colorPrimary = ContextCompat.getColor(c, R.color.colorPrimary);
rectOptions.color(colorPrimary);
Run Code Online (Sandbox Code Playgroud)