【发布时间】:2016-09-29 12:06:48
【问题描述】:
我正在 google map v2 中实现汽车组(标记)同时旋转的动画。
所以我需要在 handler.post() 方法中编写我的动画部分。
通过这样做,动画部分(handler.post() 方法)仅针对一个标记运行。
我在 for 循环中编写了 handler.post() 方法。它仅第一次运行,这意味着只有一个标记在旋转。之后它不起作用。我的代码如下。
private void animateCarsInMarkers(final MarkerOptions mark, final long bearing, final LatLng startPosition, final int position){
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
final long duration = 3000;
final Interpolator interpolator = new LinearInterpolator();
final Marker marker = mGoogleMap.addMarker(mark);
final float rotationValue = Float.parseFloat(String.valueOf(bearing));
try {
if(tempCarsArray != null && !tempCarsArray.isEmpty()){
sLongitude = tempCarsArray.get(position).getDouble(LONGITUDE);
sLatitude = tempCarsArray.get(position).getDouble(LATITUDE);
sBearing = tempCarsArray.get(position).getLong("Bearing");
final double dLongitude = startPosition.longitude;
final double dLatitude = startPosition.latitude;
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float time = interpolator.getInterpolation((float) elapsed / duration);
double lng = time * dLongitude + (1 - time) * sLongitude;
double lat = time * dLatitude + (1 - time) * sLatitude;
float rotationValue = time * dbearing + (1-time) * sBearing;
marker.setRotation((-rotationValue > 180) ? (rotationValue / 2) : rotationValue);
marker.setPosition(new LatLng(lat, lng));
if (time < 1.0) {
handler.postDelayed(this, 16);
}
}
});
tempCarsArray.clear();
} else {
marker.setPosition(startPosition);
marker.setRotation(-rotationValue > 180 ? rotationValue / 2 : rotationValue);
}
}catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
这是我在 for 循环中调用的方法。但它只在第一次循环中运行。后来它不起作用。所以在这组标记中只有一个标记是动画的。我的for循环如下:
for(int i=0; i<size; i++){
animateCarsInMarkers(mark, bearing, latLng, i);
}
此循环仅在 i=0 的值时运行,并且不会再次运行。 提前致谢。
【问题讨论】:
标签: android google-maps google-maps-markers google-maps-api-2