Trong ứng dụng của tôi cần hiển thị dấu "bản đồ google" di chuyển trơn tru từ điểm này sang điểm khác. tôi sử dụng phương pháp sau đây để các hình ảnh động:Làm thế nào để sửa trơn tru di chuyển điểm đánh dấu trong google maps v2?
public void animateMarker(final Marker marker, final LatLng toPosition,
final boolean hideMarker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = mMap.getProjection();
Point startPoint = proj.toScreenLocation(marker.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = 500;
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);
double lng = t * toPosition.longitude + (1 - t)
* startLatLng.longitude;
double lat = t * toPosition.latitude + (1 - t)
* startLatLng.latitude;
marker.setPosition(new LatLng(lat, lng));
if (t < 1.0) {
// Post again 16ms later.
handler.postDelayed(this, 16);
} else {
if (hideMarker) {
marker.setVisible(false);
} else {
marker.setVisible(true);
}
}
}
});
}
Nhưng như một kết quả của việc chỉ đơn giản là tạo ra một dấu hiệu mới đến vị trí mới (mặc dù tuổi không được cắt bỏ):
Tôi nghĩ bạn cần nói cho chế độ xem vẽ lại chính nó sau khi bạn thay đổi một vị trí và trước khi bạn bắt đầu chờ. – kaho
Ý của bạn có phải là điểm đánh dấu xóa và thêm điểm đánh dấu mới có vị trí mới không? – Rexhaif
Theo như tôi hiểu, để tiết kiệm tài nguyên, Android không vẽ màn hình cho đến khi kết thúc vòng lặp của bạn ... vì vậy bạn cần phải thông báo cho hệ thống mà bạn muốn vẽ lại màn hình. Có vẻ như điều này sẽ giúp: http://developer.android.com/reference/android/view/View.html#invalidate(android.graphics.Rect) – kaho