当我们在谷歌地图android上有位置列表时,如何将标记从一个位置移动到另一个位置

当我们在谷歌地图android上有位置列表时,如何将标记从一个位置移动到另一个位置,android,google-maps,Android,Google Maps,我正在创建带有多个标记的谷歌地图。现在我想在这些标记之间移动一个汽车图标。使用 我可以在第一个点到第二个点之间移动汽车图标。但它不会从第二个点移动到第三个点。当我使用for循环时,它会快速移动到最后一个点。我还添加了延迟,但没有其他东西对我有效 提前谢谢 这是我的代码:: public void setAnimation(GoogleMap myMap, final List<LatLng> directionPoint) { anim_map = myMap;

我正在创建带有多个标记的谷歌地图。现在我想在这些标记之间移动一个汽车图标。使用

我可以在第一个点到第二个点之间移动汽车图标。但它不会从第二个点移动到第三个点。当我使用for循环时,它会快速移动到最后一个点。我还添加了延迟,但没有其他东西对我有效

提前谢谢

这是我的代码::

public void setAnimation(GoogleMap myMap, final List<LatLng> directionPoint) {

        anim_map = myMap;


        anim_marker = myMap.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_icon))
                .position(directionPoint.get(0))
                .flat(true));


        myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(directionPoint.get(0), 10));

        if (directionPoint.size() >= 2) {

            for (int i = 0; i < directionPoint.size() - 1; i++) {
                h.post(new Runnable() {
                    @Override
                    public void run() {
                        animateMarker(anim_map, anim_marker, directionPoint, false);



                    }
                });


            }

        }


    }

private void animateMarker(GoogleMap myMap, final Marker marker, final List<LatLng> directionPoint,
                               final boolean hideMarker) {

        final long start = SystemClock.uptimeMillis();
        final long duration = 350000;
        final Interpolator interpolator = new LinearInterpolator();


        h.post(new Runnable() {
            int i = 0;

            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - start;
                float t = interpolator.getInterpolation((float) elapsed
                        / duration);

                //  Log.e("T Location", t + "");


                double lng = t * directionPoint.get(i + 1).longitude + (1 - t) * directionPoint.get(i).longitude;
                double lat = t * directionPoint.get(i + 1).latitude + (1 - t) * directionPoint.get(i).latitude;
                marker.setPosition(new LatLng(lat, lng));

                if (t < 1.0) {
                    h.postDelayed(this, 1);
                } else {
                    if (hideMarker) {
                        marker.setVisible(false);
                    } else {
                        marker.setVisible(true);
                    }
                }


            }
        });


    }
public void setAnimation(谷歌地图myMap,最终列表方向点){
动画地图=我的地图;
anim_marker=myMap.addMarker(新的MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_图标))
.位置(方向点.get(0))
.平坦(真实));
myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(directionPoint.get(0),10));
if(directionPoint.size()>=2){
对于(int i=0;i
您可以尝试这种方法,使标记在
谷歌地图中移动
类似于实时驾驶方向跟踪

    private Marker mCurrentMarker;
    private float ZOOMLEVEL=18.0f;
    private LatLng previousLatLon;
    private Handler mLocalHandler;
    private GoogleMap mGoogleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mLocalHandler = new Handler();
        previousLatLon=new LatLng(45.320372, 2.460161);
        //Initialize Marker once Google Map object is created
        mMarkerOptions = new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.custom_marker_icon));
        mMarkerOptions.position(previousLatLon);
        mCurrentMarker = mGoogleMap.addMarker(mMarkerOptions);


    }

    /**
     * Call this method to move marker in map to new location in map with updated location
     * @param marker
     * @param toPosition
     * @param fromPosition
     */
    public void animateMarker(final Marker marker, final LatLng toPosition,final LatLng fromPosition) {


        final long duration = 500;
        final Interpolator interpolator = new LinearInterpolator();

        mLocalHandler.post(new Runnable() {
            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - mStartTime;
                float t = interpolator.getInterpolation((float) elapsed
                        / duration);
                marker.setPosition(toPosition);
                marker.setAnchor(Constants.MAPANCHOR, Constants.MAPANCHOR);
                mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(toPosition, ZOOMLEVEL));
                if (t < 1.0) {
                    // Post again 16ms later.
                    mLocalHandler.postDelayed(this, 16);
                } else {
                    marker.setVisible(true);
                }
                }
            }
        });
        previousLatLon=toPosition;// reassign the previous location to current location
    }
专用标记mCurrentMarker;
私人浮动ZOOMLEVEL=18.0f;
私人车床;
私人处理程序Mlocahandler;
私有谷歌地图mGoogleMap;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mLocalHandler=新处理程序();
以前的车床=新车床(45.320372,2.460161);
//创建Google地图对象后初始化标记
mMarkerOptions=new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.custom_marker_icon));
m标记位置(以前的Latlon);
mCurrentMarker=mGoogleMap.addMarker(mMarkerOptions);
}
/**
*调用此方法将地图中的标记移动到地图中具有更新位置的新位置
*@param标记
*@param位置
*@param fromPosition
*/
公共空白动画标记器(最终标记器、最终板条位置、最终板条起始位置){
最终长持续时间=500;
最终插值器插值器=新的线性插值器();
mLocalHandler.post(新的Runnable(){
@凌驾
公开募捐{
长时间运行=SystemClock.uptimeMillis()-mStartTime;
float t=interpolator.getInterpolation((float)经过
/持续时间);
标记器。设置位置(位置);
marker.setAnchor(Constants.MAPANCHOR,Constants.MAPANCHOR);
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(地形、缩放级别));
如果(t<1.0){
//16毫秒后再次发布。
mLocalHandler.postDelayed(这个,16);
}否则{
marker.setVisible(true);
}
}
}
});
previousLatLon=位置;//将以前的位置重新指定给当前位置
}
详细阅读我的答案

在您的例子中,在for循环之后放置睡眠几毫秒

for (int i = 0; i < directionPoint.size() - 1; i++) {
try {
 Thread.sleep(5000);
} catch (InterruptedException e) 
{
 e.printStackTrace();
}
// rest of your code
for(int i=0;i
最后,我想出了这个答案。 我们必须更新与arraylist大小相关的所有值

  public void setAnimation(GoogleMap myMap, final List<LatLng> directionPoint) {

        anim_map = myMap;


        anim_marker = myMap.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_icon))
                .position(directionPoint.get(0))
                .flat(true));


        myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(directionPoint.get(0), 10));


        animateMarker(anim_map, anim_marker, directionPoint, false);


    }

    private void animateMarker(GoogleMap myMap, final Marker marker, final List<LatLng> directionPoint,
                               final boolean hideMarker) {

        final long start = SystemClock.uptimeMillis();
        long duration = 3500;
        final Interpolator interpolator = new LinearInterpolator();

        float t = 0;

        for (int j = 0; j < directionPoint.size() - 1; j++) {
            Log.e("Location Value", j + " " + directionPoint.get(j).latitude + ", " + directionPoint.get(j).longitude + " : " + directionPoint.get(j + 1).latitude + ", " + directionPoint.get(j + 1).longitude);
            while (t < j + 1) {
                t = t - j;
                double lng = t * directionPoint.get(j + 1).longitude + (1 - t) * directionPoint.get(j).longitude;
                double lat = t * directionPoint.get(j + 1).latitude + (1 - t) * directionPoint.get(j).latitude;
                LatList.add(new LatLng(lat, lng));
                long elapsed = SystemClock.uptimeMillis() - start;
                t = interpolator.getInterpolation((float) elapsed / duration);
            }
        }
        Log.e("LatList value", LatList.size() + "");
        h.post(new Runnable() {
            int i = 0;

            @Override
            public void run() {
                marker.setPosition(LatList.get(i));
                if ((LatList.size() - 1) > i)
                    h.postDelayed(this, 1);
                Log.e("I value", i + "");
                i++;
            }
        });


    }
public void setAnimation(谷歌地图myMap,最终列表方向点){
动画地图=我的地图;
anim_marker=myMap.addMarker(新的MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_图标))
.位置(方向点.get(0))
.平坦(真实));
myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(directionPoint.get(0),10));
动画标记器(动画地图、动画标记、方向点、假);
}
私有void animateMarker(谷歌地图myMap、最终标记、最终列表方向点、,
最终布尔hideMarker){
最终长启动=SystemClock.uptimeMillis();
长持续时间=3500;
最终插值器插值器=新的线性插值器();
浮动t=0;
对于(int j=0;j