教程 – Android地图引脚放置animation – 工作正确

我需要我的Android应用程序的地图别针放下animation。 做了大量的研究,我发现没有用处。 所以我创build了一个小黑客。 只需发布代码,以便其他人可以使用它并相应地修改它。

由于Android中的翻译animation只能在视图中使用,覆盖层不是视图,所以我创build了一个小小的黑客,通过翻译animation在相同的地理位置放置视图,然后移除视图以显示叠加层。 这样,用户认为地图叠加层即使不在顶部,也会从顶部删除。

这里是代码:

private void translateAnimation(MapView mapView,ArrayList<GeoPoint> geoPointsList,Context context) { Point dropPoint = new Point(); Projection projection = mapView.getProjection(); /* * Getting the map projections to calculate * screen points and geopoints */ GeoPoint mGeoPoint = projection.fromPixels(0, 0); /* Map View screen parameters */ MapView.LayoutParams screenParameters = new MapView.LayoutParams( MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, mGeoPoint, 0, 0, MapView.LayoutParams.LEFT | MapView.LayoutParams.BOTTOM); for (GeoPoint geoPoint : geoPointsList) { projection.toPixels(geoPoint, dropPoint); /* * As Overlays are not a subclass of views so * view animation cannot work */ ImageView imageView = new ImageView(context); /* * Therefore creating an imageview for * every overlay point apply the * transition animation and then removing * the imageview */ imageView.setImageResource(R.drawable.map_pin_focused); /* Translation animation to show Falling Pins effect */ Bitmap markerImage = BitmapFactory.decodeResource(context.getResources(), R.drawable.map_pin_focused); TranslateAnimation drop = new TranslateAnimation(dropPoint.x - (markerImage.getWidth() / 2), dropPoint.x - (markerImage.getWidth() / 2), 0, dropPoint.y + (markerImage.getHeight() / 2)); drop.setDuration(600); drop.setFillAfter(true); drop.setStartOffset(100); imageView.startAnimation(drop); mapView.addView(imageView, screenParameters); // imageView.setAnimation(drop); } } 

当您需要显示此animation时 – 运行一个新的线程,用户可以看到图像视图的丢弃,然后在animation完成后将其删除。

 private void startTranslationAnimation() { translationAnimation(mapView, geoPointsList, this); new Thread(new Runnable() { public void run() { try { Thread.sleep(1000); /* * Making thread sleep for 1 sec so that animation can be * seen before updating the overlays */ } catch (InterruptedException e) { e.printStackTrace(); } mapView.post(new Runnable() { public void run() { mapView.removeAllViews(); /* Removing all the image Views */ mapOverlays.add(itemOverlay); /* * Adding the overlay items on map overlay * list */ mapView.invalidate(); /* Refreshing the map overlays */ } }); } }).start(); } 

请随意修改它,并build议任何更改。 当然,如果你有大量的叠加层,它也会创build大量的图像视图,导致内存问题,但是对于less量的叠加层来说,它是非常有效的。 我用它至less有100个覆盖,它很好。

Solutions Collecting From Web of "教程 – Android地图引脚放置animation – 工作正确"