将动画添加到群集标记?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将动画添加到群集标记?相关的知识,希望对你有一定的参考价值。
简单的问题...如何在群集在地图上绘制动画之前将动画添加到群集的标记中?我一直在寻找但没有希望。我只需要知道从哪里开始
这是我添加我的群集以及我如何尝试动画的方式
private class AddMarker implements Runnable {
private MarkerOptions options;
public AddMarker(MarkerOptions options) {
this.options = options;
}
@Override
public void run() {
MyPoi poi = new MyPoi(options.getPosition());
mClusterManager.addItem(poi);
List<Marker> markers = new ArrayList<>();
markers.addAll(mClusterManager.getMarkerCollection().getMarkers());
if(markers.size() == 0){
}else if (markers.size() == 1){
animateMarker(markers.get(0),Constants.MARKER_ADD);
}else if(markers.size() > 1){
animateMarker(markers.get(markers.size()-1),Constants.MARKER_ADD);
}
mClusterManager.cluster();
//Marker newMarker = googleMap.addMarker(options);
//newMarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
}
}
答案
这是我的解决方案:
private void setMarkerBounce(Marker marker) {
for (final com.google.android.gms.maps.model.Marker m : mClusterManager.getMarkerCollection().getMarkers()) {
if (m.getPosition().equals(marker.getPosition())) {
final Handler handler = new Handler();
final long startTime = SystemClock.uptimeMillis();
final long duration = 2000;
final Interpolator interpolator = new BounceInterpolator();
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - startTime;
float t = Math.max(1 - interpolator.getInterpolation((float) elapsed / duration), 0);
m.setAnchor(0.5f, 1.0f + t);
if (t > 0.0) {
handler.postDelayed(this, 16);
}
}
});
return;
}
}
}
这有点难看,但工作正常。您必须传递自定义ClusterItem实例。
另一答案
如果你看看DefaultClusterRenderer
类,它有onClusterRendered(Cluster<T> cluster, MarkerOptions markerOptions)
和onClusterItemRendered(T clusterItem, Marker marker)
方法。例如,您可以尝试以下代码(在自定义群集渲染器中):
@Override
protected void onClusterRendered(Cluster<ClusterItemImpl> cluster, Marker marker) {
animateMarkerDropping(marker);
}
@Override
protected void onClusterItemRendered(ClusterItemImpl clusterItem, Marker marker) {
animateMarkerDropping(marker);
}
private void animateMarkerDropping(final Marker marker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
final long duration = 500;
final Interpolator interpolator = new AccelerateInterpolator();
handler.post(new Runnable() {
@Override
public void run() {
final long elapsed = SystemClock.uptimeMillis() - start;
final float t = Math.max(1 -
interpolator.getInterpolation((float) elapsed / duration), 0);
marker.setAnchor(0.5f, 1f + 14 * t);
if (t > 0f) {
handler.postDelayed(this, 15);
}
}
});
}
其中ClusterItemImpl
只是一个扩展ClusterItem的类,而animateMarkerDropping(final Marker marker)
是András的答案中略有修改的方法。
以上是关于将动画添加到群集标记?的主要内容,如果未能解决你的问题,请参考以下文章
java 将循环显示和不显示过渡动画添加到Android片段
如何将 CSS-Class 添加到 GoogleMaps 标记?