我正在为maps(v2)创建一个集群特性。我将位置分组到集群中,然后将集群显示为自定义标记:
这很好,但我想创建一个动画时,集群得到创建和分裂。通过在标记(注释)上创建uiview动画,我成功地在ios上实现了这一点。我在网上找不到Android的任何代码/提示。
我设法得到了一个简单的imageview作为覆盖,以类似于一个集群,然后使用TranslateAnimation来获得所需的动画。最后我删除了这个视图并添加了标记。
有没有更好的方法来动画标记?

最佳答案

通过设置标记对象的动画,而不是在googlemap前面添加和删除视图,您走上了正确的轨道,但是如果使用animator对象设置标记的动画,则可以获得更好的性能。
使用处理程序和延迟可运行的方法,可以有效地硬编码目标帧速率。如果在延迟太低的情况下发布runnable,则动画将需要更长的执行时间。如果太高,帧速率会太慢,即使在功能强大的设备上也会显得不稳定。与处理程序和延迟的runnable相比,使用animator的优势在于它只调用onanimationupdate()来尽可能频繁地绘制下一帧。
在集群库Clusterkraf中,我使用objectanimator(从NineOldAndroids向后兼容)在更改缩放级别时设置集群转换的动画。它可以在我的银河系上平滑地设置大约100个标记。
下面是一个小片段,概述了如何使之工作。

class ClusterTransitionsAnimation implements AnimatorListener, AnimatorUpdateListener {

    private ObjectAnimator animator;
    private AnimatedTransitionState state;
    private ClusterTransitions transitions;
    private Marker[] animatedMarkers;

    void animate(ClusterTransitions transitions) {
        if (this.state == null) {
            Options options = optionsRef.get();
            Host host = hostRef.get();
            if (options != null && host != null) {
                this.state = new AnimatedTransitionState(transitions.animated);
                this.transitions = transitions;
                animator = ObjectAnimator.ofFloat(this.state, "value", 0f, 1f);
                animator.addListener(this);
                animator.addUpdateListener(this);
                animator.setDuration(options.getTransitionDuration());
                animator.setInterpolator(options.getTransitionInterpolator());
                host.onClusterTransitionStarting();
                animator.start();
            }
        }
    }

    @Override
        public void onAnimationStart(Animator animator) {
            // Add animatedMarkers to map, omitted for brevity
        }

    @Override
    public void onAnimationUpdate(ValueAnimator animator) {
        if (state != null && animatedMarkers != null) {
            LatLng[] positions = state.getPositions();
            for (int i = 0; i < animatedMarkers.length; i++) {
                animatedMarkers[i].setPosition(positions[i]);
            }
        }
    }
}

关于android - Android Maps v2-动画标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14645489/

10-16 23:32