如何在Android中为Drawable设置动画?

时间:2012-11-24 19:21:14

标签: java android animation

我的应用程序中有一个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();
    }
}

解决方案无效。

1 个答案:

答案 0 :(得分:0)

一般情况下,动画包很不错。我记得我有动画没有开始的同样的问题,我带来的解决方案是开始它不是在onCreate(),而不是我以前做过但onWindowFocusChanged()一旦设置了所有视图的东西。我本人并没有自己扩展AnimationDrawable,但它可能与你的情况相同。