我将我的Android应用程序与最新的GoogleMaps V2一起升级到Marshmallow 23。我这样做的一个原因是因为最新的地图允许我们设置我们在地图上绘制的东西的z-index的.zIndex参数。
但我的问题是编译器允许它在我的某些addMarker语句中使用,但在其他语句中却没有。
在下面的代码中,编译器标记.zIndex说不能解析方法:
private void addLegMarker(GoogleMap map, double lat, double lon,
String title, String snippet, float bearing)
{
//this method adds the permanent pin to the map and "moves" the arrow representing the target
//following two floats put the pin point exactly on the blue line
float u = (float) 0.2;
float v = (float) 1.0;
//following float center the arrow
float center = (float) 0.5;
//float myRotation = (float) 90.0;
//add the permanent pin to the location...
map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
.title(title)
.snippet(snippet)
.anchor(u, v))
.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.cpin)
.zIndex(1.0f)
);
if (!(lastArrowMarker == null))
{
lastArrowMarker.remove();
}
String ArrowSnippet = "Last known position of target phone";
lastArrowMarker = map.addMarker(new MarkerOptions()
.position(new LatLng(lat, lon))
.anchor(center, center)
.snippet(ArrowSnippet)
.rotation(bearing)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.smallredarrow)
.zIndex(1.0f)
));
}
这是我的build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
useLibrary 'org.apache.http.legacy' //httpClient not supported in 23.
defaultConfig {
applicationId "com.deanblakely.myappname"
minSdkVersion 16
targetSdkVersion 23
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile project(':library')
//compile project(':googleplayservices_lib')
compile files('libs/gson-2.2.4.jar')
compile 'com.android.support:appcompat-v7:23+'
compile 'com.android.support:design:23+'
//compile 'com.google.android.gms:play-services:9.4.0' too big. we just need maps and gcm
compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
}
然而,以下代码接受.zIndex就好了:
lastArrowMarker = map.addMarker((new MarkerOptions()
.position(new LatLng(myPos.latitude, myPos.longitude))
.anchor(center, center)
.snippet("Trip End")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.smallblackdot))
.zIndex(1.0f)
我注意到它被标记的地方,地图对象作为参数传递,并且工作正常,代码直接指向GoogleMap命名地图,但我不知道这是多么重要。< / p>
为什么编译器在一个地方接受这一个参数并在另一个地方标记它?
答案 0 :(得分:1)
MarkerOptions
班has a zIndex()
method,但Marker
班has a setZIndex()
method。
GoogleMap.addMarker()
方法从Marker
对象(构建器)返回MarkerOptions
对象,这会引起您的混淆。
如果它无效,您就会在zIndex()
对象上调用setZIndex()
而不是Marker
。
答案 1 :(得分:0)
请尝试使用equals()
代替==
。
我还没有真正尝试过,它可能看起来有点奇怪,但正如Handle marker events中提到的那样,
当事件发生在地图上的一个标记上时,将调用侦听器的回调,并将相应的
Marker
对象作为参数传递。要将此Marker
对象与您对Marker
对象的引用进行比较,必须使用equals()而不是== 。