我正在使用给出的谷歌地图标记动画逻辑here https://gist.github.com/broady/6314689.
我的标记变得动画,但每次之后marker.setPosition(newPosition);
我需要打电话mapView.invalidate();
这会刷新地图,导致动画非常缓慢。
有什么解决方法吗?
下一个解决方案对我来说工作正常:
import org.osmdroid.api.IGeoPoint;
import org.osmdroid.api.IMapController;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.Projection;
import org.osmdroid.views.overlay.Marker;
public void animateMarker(final Marker marker, final GeoPoint toPosition) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = map.getProjection();
Point startPoint = proj.toPixels(marker.getPosition(), null);
final IGeoPoint startGeoPoint = proj.fromPixels(startPoint.x, startPoint.y);
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.getLongitude() + (1 - t) * startGeoPoint.getLongitude();
double lat = t * toPosition.getLatitude() + (1 - t) * startGeoPoint.getLatitude();
marker.setPosition(new GeoPoint(lat, lng));
if (t < 1.0) {
handler.postDelayed(this, 15);
}
map.postInvalidate();
}
});
}
它基于一些人为 GoogleMaps v2 所做的相同实现,但适用于 osmdroid。
我找到 GoogleMaps v2 实现的来源在这里:如何在 android 地图 api V2 中对标记进行动画处理? https://stackoverflow.com/questions/13872803/how-to-animate-marker-in-android-map-api-v2
我在用:
osmdroid-android 5.5 和 osmbonuspack 6.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)