0

我的应用程序中有一个Drawable对象正在屏幕上移动:

public class MyDrawable extends Drawable {

    @Override
    public void draw(Canvas canvas) {
        // ...
    }
    // ...
}

到目前为止它工作得很好,但现在我必须为它制作动画Drawable。我查看了文档,看起来对我来说最好的选择是使用AnimationDrawable.

我做了这样的事情:

public void addAnimation() {
    animation = new AnimationDrawable();
    animation.addFrame(resources.getDrawable(R.drawable.anim_0), 100);
    animation.addFrame(resources.getDrawable(R.drawable.anim_1), 100);
    animation.addFrame(resources.getDrawable(R.drawable.anim_2), 100);
    animation.addFrame(resources.getDrawable(R.drawable.anim_3), 100);
    animation.setOneShot(false);
    refreshAnimationBounds();
    animation.start();
}

@Override
public void draw(Canvas canvas) {
    refreshAnimationBounds();
    animation.draw(canvas);
}

发生的情况是我的原件Drawable正在按预期移动,但我只看到第一帧。可能是什么问题呢?

refreshAnimationBounds();只是刷新我的Drawable对象的边界(重新定位它)。

编辑:

常见的:

public void onWindowFocusChanged(boolean hasFocus) {
    if (hasFocus) {
        animation.start();
    } else {   
        animation.stop();
    }
}

解决方案不起作用。

4

1 回答 1

0

一般来说,动画包是相当错误的。我记得我在动画无法启动时遇到了同样的问题,我提出的解决方案不是onCreate()像以前那样启动它,而是onWindowFocusChanged()在设置所有视图内容后启动它。我自己并没有扩展 AnimationDrawable ,但在您的情况下它可能是相同的来源。

于 2012-11-24T19:26:28.930 回答