Google 地图 Android 中的多段线绘制不流畅
Polylines not smoothly traced in Google Maps Android
我正在使用以下代码在 Google 地图上制作多段线追踪动画。根据 LatLong 列表(markerPojoList)跟踪多段线。
我已经在一定程度上实现了描摹的流畅性,但我希望以更流畅的方式描摹这些线条。
`private void animateMarkers(final Marker marker) {
final PolylineOptions polylineOptions = new PolylineOptions().color(Color.RED);
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,
1);
valueAnimator.setDuration(0);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new
ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator
valueAnimator) {
v = valueAnimator.getAnimatedFraction();
if (i < markerPojoList.size()){
lng = v * markerPojoList.get((i + 1) -
1).getLongitude() +
(1 - v) * markerPojoList.get(i).getLongitude();
lat = v * markerPojoList.get((i + 1) - 1).getLattitude() +
(1 - v)markerPojoList.get(i).getLattitude();
LatLng newPos = new LatLng(lat, lng);
marker.setPosition(newPos);
polylineOptions.add(newPos);
line = mMap.addPolyline(polylineOptions);
mMap.moveCamera(CameraUpdateFactory
.newCameraPosition(new CameraPosition.Builder()
.target(newPos)
.zoom(mMap.getCameraPosition().zoom)
.build()));
}}});
valueAnimator.start();
i++;
if (i < markerPojoList.size())
handler.postDelayed(this, 10);
}
});
}`
我已经编辑了你的代码试试这个
private void animateMarkers(final Marker marker) {
final PolylineOptions polylineOptions = new PolylineOptions().color(Color.RED);
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,
1);
valueAnimator.setDuration(0);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator
valueAnimator) {
if (i < markerPojoList.size()) {
lng = v * markerPojoList.get((i + 1) - 1).getLongitude() + markerPojoList.get(i).getLongitude();
lat = v * markerPojoList.get((i + 1) - 1).getLattitude() + markerPojoList.get(i).getLattitude();
LatLng newPos = new LatLng(lat, lng);
marker.setPosition(newPos);
polylineOptions.add(newPos);
line = mMap.addPolyline(polylineOptions);
mMap.moveCamera(CameraUpdateFactory
.newCameraPosition(new CameraPosition.Builder()
.target(newPos)
.zoom(mMap.getCameraPosition().zoom)
.build()));
}
}
});
valueAnimator.start();
i++;
if (i < markerPojoList.size())
handler.postDelayed(this, 10);
}
});
}
我正在使用以下代码在 Google 地图上制作多段线追踪动画。根据 LatLong 列表(markerPojoList)跟踪多段线。 我已经在一定程度上实现了描摹的流畅性,但我希望以更流畅的方式描摹这些线条。
`private void animateMarkers(final Marker marker) {
final PolylineOptions polylineOptions = new PolylineOptions().color(Color.RED);
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,
1);
valueAnimator.setDuration(0);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new
ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator
valueAnimator) {
v = valueAnimator.getAnimatedFraction();
if (i < markerPojoList.size()){
lng = v * markerPojoList.get((i + 1) -
1).getLongitude() +
(1 - v) * markerPojoList.get(i).getLongitude();
lat = v * markerPojoList.get((i + 1) - 1).getLattitude() +
(1 - v)markerPojoList.get(i).getLattitude();
LatLng newPos = new LatLng(lat, lng);
marker.setPosition(newPos);
polylineOptions.add(newPos);
line = mMap.addPolyline(polylineOptions);
mMap.moveCamera(CameraUpdateFactory
.newCameraPosition(new CameraPosition.Builder()
.target(newPos)
.zoom(mMap.getCameraPosition().zoom)
.build()));
}}});
valueAnimator.start();
i++;
if (i < markerPojoList.size())
handler.postDelayed(this, 10);
}
});
}`
我已经编辑了你的代码试试这个
private void animateMarkers(final Marker marker) {
final PolylineOptions polylineOptions = new PolylineOptions().color(Color.RED);
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,
1);
valueAnimator.setDuration(0);
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator
valueAnimator) {
if (i < markerPojoList.size()) {
lng = v * markerPojoList.get((i + 1) - 1).getLongitude() + markerPojoList.get(i).getLongitude();
lat = v * markerPojoList.get((i + 1) - 1).getLattitude() + markerPojoList.get(i).getLattitude();
LatLng newPos = new LatLng(lat, lng);
marker.setPosition(newPos);
polylineOptions.add(newPos);
line = mMap.addPolyline(polylineOptions);
mMap.moveCamera(CameraUpdateFactory
.newCameraPosition(new CameraPosition.Builder()
.target(newPos)
.zoom(mMap.getCameraPosition().zoom)
.build()));
}
}
});
valueAnimator.start();
i++;
if (i < markerPojoList.size())
handler.postDelayed(this, 10);
}
});
}