Android setRotation关于标记隐藏标记

时间:2019-04-05 07:02:23

标签: android google-maps google-maps-markers

我想按方向移动和旋转标记,移动标记的效果很好,但是当我添加标记旋转时,它隐藏了标记,当我评论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;
}

1 个答案:

答案 0 :(得分:0)

确保为您的标记设置了.anchor(0.5f, 0.5f),并更好地使用SphericalUtil.computeHeading()中的Google Maps Android API Utility Library 而不是您的private float getBearing(LatLng begin, LatLng end)