我可以在MapView的叠加层中使用AnimationDrawable吗?

6
我已经在XML中创建了一个AnimationDrawable,并且它可以正常工作。但是,将可动画的drawable移动到MapView中作为覆盖物标记(替换了一个正常工作的静态drawable)后,动画顽固地拒绝播放。我将start()方法的调用移到了一个按钮上进行测试,即使在MapView显示几秒钟后按下该按钮,动画也不会启动。在logcat中我看不到任何东西。我知道需要在设置所有窗口之后才需要调用start()方法,但这似乎是一个单独的问题。

AnimationDrawables与MapView兼容吗?

是否有特殊的设置需要做才能在MapView中运行AnimationDrawables?

你是否已经成功让AnimationDrawables在MapView中运行过?

解决方案

使用Matt的解决方案(下面),我通过将ImageView放在MapView的图层内而不是使用覆盖物来添加AnimationDrawable。

public void showAnimatedMarker(GeoPoint point) {
    LinearLayout v = (LinearLayout) View.inflate(context, R.layout.markerlayout, null);
    ImageView marker = (ImageView) v.findViewById(R.id.marker);
    AnimationDrawable markerImage = (AnimationDrawable)marker.getDrawable();
    this.addView(v, 0, new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, point, MapView.LayoutParams.BOTTOM_CENTER));
    markerImage.start();
}

然后是 markerlayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
    <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/marker"
            android:src="@drawable/my_animation_drawable"
    />
</LinearLayout>

你发现的东西非常出色和可接受,但它只是主要解决方案的替代品,应该有一种方法使用覆盖类来进行动画,因为它旨在在地图上放置标记。你所做的是直接调用地图上的渲染线程并绘制任何你想要的东西。很好。但我想让你的解决方案与标记一起工作。你有关于这方面的任何发现吗? 我也在寻找同样的解决方案,但如果我使用你建议的膨胀方法来更改覆盖类,对我来说会有更多的变化。 - kaushal trivedi
1个回答

3
这段内容与动画尚未经过测试,但可能会有一定用处。
我在向MapView添加小部件时遇到了问题,但找到了addView方法。尝试通过此方法添加AnimationDrawable,它可能会改变MapView对其的处理方式,从而正确地进行动画:
这里有一个简短的示例,请参考: http://www.gauntface.co.uk/pages/blog/2010/01/04/mapview-with-widgets-android/

更新链接:http://www.gauntface.co.uk/blog/2010/01/04/mapview-with-widgets-android/ - Li3ro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接