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 に答える