我实施了汽车组(标记)的动画,以便在Google地图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的值时运行且不会再次运行。 提前谢谢。
答案 0 :(得分:0)
如果'for loop'仅运行一次,则表示此实例的“for循环条件部分”i<size
已满足条件。我建议您实际记录“大小”并检查其值。
如果您正在寻找the size of an array,请使用tempCarsArray.length,如:
for(int i=0; i < tempCarsArray.length; i++){
animateCarsInMarkers(mark, bearing, latLng, i);
}
要检查size
是否导致问题,请尝试此操作。
如果你知道你想要旋转的标记的实际数量,现在尝试用整数替换,例如:
//if you're expecting 5 markers
for(int i=0; i < 5 ; i++){
animateCarsInMarkers(mark, bearing, latLng, i);
}
如果所有标记都旋转,则表示您的size变量的值只有1。