我正在尝试对地图标记实施dropping pin
效果。我已经实现了如下代码,但我找不到标记上出现的动画。任何人都可以一步一步指导我如何做到这一点。
final LatLng latlang = new LatLng(15.4989, 73.8278);
final MarkerOptions marker = new MarkerOptions().position(latlang).title("Hello Maps ");
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlang, 17));
mGoogleMap.addMarker(marker);
final long start = SystemClock.uptimeMillis();
Projection proj = mGoogleMap.getProjection();
Point startPoint = proj.toScreenLocation(marker.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final Interpolator interpolator = new LinearInterpolator();
handler.postDelayed(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float t = interpolator.getInterpolation((float) elapsed / 1000);
double lng = t * latlang.longitude + (1 - t) * startLatLng.longitude;
double lat = t * latlang.latitude + (1 - t) * startLatLng.latitude;
Log.i("marker thread","elapsed"+elapsed+",t"+t+"lng,"+lng+",lat"+lat);
marker.position(new LatLng(lat, lng));
}
}, 1000);
答案 0 :(得分:0)
您的代码中存在3个问题,
首先,你的处理程序永远不会自己回复,它只是等待一秒钟。要解决此问题,您必须在handler.postDelayed(this, 16);
之前的处理程序中调用处理程序,直到t >= 1
(一秒)
其次,您应该等待0.016秒,而不是1秒整秒来进行外部处理程序调用。
最后,您的"标记"实际上是markerOption,因此您的代码应该是这样的:
final MarkerOptions markerOptions = new MarkerOptions().position(latlang).title("Hello Maps ");
final Marker marker = googleMap.addMarker(markerOptions);
而不是使用marker.position
,而是marker.setPosition(new LatLng(lat, lng));