我想按方向移动和旋转标记,移动标记的效果很好,但是当我添加标记旋转时,它隐藏了标记,当我评论setRotation()
方法时,我正在使用以下代码进行标记移动动画和旋转工作正常,但是当我取消注释setRotation()
行时,它会在位置更新中隐藏标记
public void animateMarker(final LatLng toPosition,final LatLng neLatLong,
final boolean hideMarker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
final long duration = 200;
final Interpolator interpolator = new LinearInterpolator();
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float t = interpolator.getInterpolation((float) elapsed
/ duration);
curMarker.setPosition(toPosition);
curMarker.setRotation(getBearing(toPosition,neLatLong));
if (t < 1.0) {
// Post again 16ms later.
handler.postDelayed(this, 16);
} else {
if (hideMarker) {
curMarker.setVisible(false);
} else {
curMarker.setVisible(true);
}
}
}
});
}
private float getBearing(LatLng begin, LatLng end) {
double lat = Math.abs(begin.latitude - end.latitude);
double lng = Math.abs(begin.longitude - end.longitude);
if (begin.latitude < end.latitude && begin.longitude < end.longitude)
return (float) (Math.toDegrees(Math.atan(lng / lat)));
else if (begin.latitude >= end.latitude && begin.longitude < end.longitude)
return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 90);
else if (begin.latitude >= end.latitude && begin.longitude >= end.longitude)
return (float) (Math.toDegrees(Math.atan(lng / lat)) + 180);
else if (begin.latitude < end.latitude && begin.longitude >= end.longitude)
return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 270);
return -1;
}
答案 0 :(得分:0)
确保为您的标记设置了.anchor(0.5f, 0.5f)
,并更好地使用SphericalUtil.computeHeading()
中的Google Maps Android API Utility Library 而不是您的private float getBearing(LatLng begin, LatLng end)