无法在android中的地图标记上实现掉落图钉动画

时间:2015-04-18 08:38:23

标签: android google-maps google-maps-markers android-animation

我正在尝试对地图标记实施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);

1 个答案:

答案 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));