Android 标记动画创建重复项
我开发了一个位置感知应用程序,并使用自定义标记作为我的位置(Android 标记动画创建重复项,android,animation,google-maps-markers,Android,Animation,Google Maps Markers,我开发了一个位置感知应用程序,并使用自定义标记作为我的位置('blue-dot'),但每当标记移动到一个新位置时,它就会在地图上的旧位置留下一个重复标记 代码如下: 标记 myMarker = mMap.addMarker(new MarkerOptions() .flat(true) .position(new LatLng(0, 0)) .anchor(0.5f, 0.5f)
'blue-dot'
),但每当标记移动到一个新位置时,它就会在地图上的旧位置留下一个重复标记
代码如下:
标记
myMarker = mMap.addMarker(new MarkerOptions()
.flat(true)
.position(new LatLng(0, 0))
.anchor(0.5f, 0.5f)
.visible(true)
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.position)));
召唤
方法
static void animateMarker(final Marker marker, final LatLng finalPosition) {
TypeEvaluator<LatLng> typeEvaluator = new TypeEvaluator<LatLng>() {
@Override
public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) {
double lat = (finalPosition.latitude - marker.getPosition().latitude) * fraction + marker.getPosition().latitude;
double lng = (finalPosition.longitude - marker.getPosition().longitude) * fraction + marker.getPosition().longitude;
return new LatLng(lat, lng);
}
};
Property<Marker, LatLng> property = Property.of(Marker.class, LatLng.class, "position");
ObjectAnimator animator = ObjectAnimator.ofObject(marker, property, typeEvaluator, finalPosition);
animator.setDuration(3000);
animator.start();
}
static void animateMarker(最终标记、最终板条最终位置){
TypeEvaluator TypeEvaluator=新的TypeEvaluator(){
@凌驾
公共LatLng评估(浮动分数、LatLng起始值、LatLng结束值){
双纬度=(finalPosition.latitude-marker.getPosition().latitude)*分数+marker.getPosition().latitude;
double lng=(finalPosition.longitude-marker.getPosition().longitude)*分数+marker.getPosition().longitude;
返回新的LatLng(lat,lng);
}
};
属性=属性(Marker.class,LatLng.class,“位置”);
ObjectAnimator animator=ObjectAnimator.of对象(标记、属性、类型计算器、最终位置);
设置持续时间(3000);
animator.start();
}
正如你可能注意到的那样,animateMarker方法来自GoogleDevBytes视频,所以我想这不应该是问题所在
我做错什么了吗?这是谷歌Api中的一个bug吗 检查以下要点:
尝试以这种方式实现它更改如下:
if (calcDistance(mCurrentLocation, reference) > 0.1) //prevent wobbly marker
{
animateMarker(myMarker, mCurrentLocation);
}
为此:
if (calcDistance(mCurrentLocation, reference) > 0.1) //prevent wobbly marker
{
if (myMarker != null) {
myMarker.remove();
}
animateMarker(myMarker, mCurrentLocation);
}
if (calcDistance(mCurrentLocation, reference) > 0.1) //prevent wobbly marker
{
if (myMarker != null) {
myMarker.remove();
}
animateMarker(myMarker, mCurrentLocation);
}