安卓,如何在地图上制作动画叠加



请指导我如何在地图上做动画标记/图钉/叠加图标。我从过去 2 天开始尝试了很多,但我没有得到成功。

提前谢谢..

不工作

res/drawable/map_marker.xml

 <?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
 android:oneshot="false">
<item android:drawable="@drawable/ecall_lowon" android:duration="200" />
<item android:drawable="@drawable/ecall_mediumoff" android:duration="200" />

爪哇代码

    Drawable drawable = this.getResources().getDrawable(R.drawable.map_marker);
    MapItemizedOverlay mapItemizedOverlay = new MapItemizedOverlay(drawable, this);
    GeoPoint geoPoint1 = new GeoPoint((int)(9.982878 * 1E6), (int)(76.285774 * 1E6));
    GeoPoint geoPoint2 = new GeoPoint((int)(9.973928 * 1E6), (int)(76.276824 * 1E6));
    OverlayItem overlayItem1 = new OverlayItem(geoPoint1, "Title1", "");
    OverlayItem overlayItem2 = new OverlayItem(geoPoint2, "Title2", "");
    mapItemizedOverlay.addOverlayItems(overlayItem1);
    mapItemizedOverlay.addOverlayItems(overlayItem2);
    mapView.getOverlays().add(mapItemizedOverlay);

但是没有得到成功...

在 XML 中定义的按顺序 (<animation-list />) 显示图像序列的动画可能无法在地图上显示闪烁的图钉

我有解决这个问题并找到解决方案之一

想法:两个可绘制对象..,RunnablehandlerSetPin_On()SetPin_Off(),SetPin_On方法使用一个图像,SetPin_Off方法使用另一个图像,在每个函数上调用清除覆盖并再次添加

资源:拍摄两张图片说pin_on,pin_off

编码:需要使用处理程序运行以间隔设置引脚

例:

Handler handler=new Handler();
      int check=0;
          Runnable r=new Runnable()
          {
        @Override
        public void run() 
        {
             if(check==0)
             {
               SetPin_On();
               check=1;
             }
             else if(check==1)
             {
               SetPin_Off();
               check=0;
             }
            handler.postDelayed(this, 500);
        }
    };

SetPin_On方法中,将pin_on图像设置在叠加层上,并在SetPin_Off方法中再次通过清除以前的叠加层来设置图像pin_off

SetPin_On:

void SetPin_On()
    {
         mapOverlays = mapView.getOverlays();
         mapOverlays.clear(); 
         res =getResources(); 
         drawable = res.getDrawable(R.drawable.pin_on);
         itemizedOverlay = new CustomItemizedOverlay(drawable,this, mapView);

         point = new GeoPoint((int)(Double.parseDouble(lati)*1E6),(int)(Double.parseDouble(longi)*1E6));
         overlayitem = new OverlayItem(point, "Hello", "I'm in Athens, Greece!");
         itemizedOverlay.addOverlay(overlayitem);
         mapOverlays.add(itemizedOverlay);
         mapController = mapView.getController();
         mapController.animateTo(point);
         mapController.setZoom(6);
    }

SetPin_Off:

void SetPin_Off()
    {
        mapOverlays = mapView.getOverlays();
         mapOverlays.clear(); 
         res =getResources(); 
         drawable = res.getDrawable(R.drawable.pin_off);
         itemizedOverlay = new CustomItemizedOverlay(drawable,this, mapView);

         point = new GeoPoint((int)(Double.parseDouble(lati)*1E6),(int)(Double.parseDouble(longi)*1E6));
         overlayitem = new OverlayItem(point, "Hello", "I'm in Athens, Greece!");
         itemizedOverlay.addOverlay(overlayitem);
         mapOverlays.add(itemizedOverlay);
         mapController = mapView.getController();
         mapController.animateTo(point);
         mapController.setZoom(6);
    }

这是获得闪烁针脚的一种解决方案。可能效率不高,但结果非常准确

请参阅此处了解另一种解决方案

最新更新