android地图平滑移动,如何在谷歌地图中显示当前位置的平滑移动android

你一定要试试这种方式它会帮助你

private void animateMarkerNew(final LatLng startPosition, final LatLng destination, final Marker marker) {

if (marker != null) {

final LatLng endPosition = new LatLng(destination.latitude, destination.longitude);

final float startRotation = marker.getRotation();

final LatLngInterpolatorNew latLngInterpolator = new LatLngInterpolatorNew.LinearFixed();

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);

valueAnimator.setDuration(2000); // duration 3 second

valueAnimator.setInterpolator(new LinearInterpolator());

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

try {

float v = animation.getAnimatedFraction();

LatLng newPosition = latLngInterpolator.interpolate(v, startPosition, endPosition);

marker.setPosition(newPosition);

googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder()

.target(newPosition)

.zoom(18f)

.build()));

marker.setRotation(getBearing(startPosition, new LatLng(destination.latitude, destination.longitude)));

} catch (Exception ex) {

//I don't care atm..

}

}

});

valueAnimator.addListener(new AnimatorListenerAdapter() {

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

// if (mMarker != null) {

// mMarker.remove();

// }

// mMarker = googleMap.addMarker(new MarkerOptions().position(endPosition).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_car)));

}

});

valueAnimator.start();

}

}

注:标记为要进行动画处理的一个标志,其平均。

private interface LatLngInterpolatorNew {

LatLng interpolate(float fraction, LatLng a, LatLng b);

class LinearFixed implements LatLngInterpolatorNew {

@Override

public LatLng interpolate(float fraction, LatLng a, LatLng b) {

double lat = (b.latitude - a.latitude) * fraction + a.latitude;

double lngDelta = b.longitude - a.longitude;

// Take the shortest path across the 180th meridian.

if (Math.abs(lngDelta) > 180) {

lngDelta -= Math.signum(lngDelta) * 360;

}

double lng = lngDelta * fraction + a.longitude;

return new LatLng(lat, lng);

}

}

}

//方法两点

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值