2

フレームアニメーションを表示するために使用されている ImageView があります。これらの画像の期間はすべて 100 に設定されています。

ただし、ImageView を非表示にする必要がある場合もあります。したがって、アニメーションは停止し、ImageView は GONE に設定されます。

ImageView を再度表示するときは、可視性が VISIBLE に設定され、アニメーションが開始されます。

ただし、アニメーションは非常に高速になりました。100 のデュレーションではなく、50 のように見えます。しかし、デュレーションを確認すると、まだ 100 と表示されています。

ImageView を非表示および表示するコードは次のとおりです。

    //hide the animation
    final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
    if (frameAnim.isRunning() == true)
    {
        frameAnim.stop();
    }

    frameAnim.setVisible(false, false);
    animImgView.setVisibility(View.GONE);




    //show animation
    animImgView.setVisibility(View.VISIBLE);

    final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
    frameAnim.setVisible(true, true);
    frameAnim.start();

問題は何ですか?

4

3 に答える 3

3

いくつかの実験の後、最善の方法は単純に実装することであることがわかりました:

//hide the animation
animImgView.setVisibility(View.GONE);


//show animation
animImgView.setVisibility(View.VISIBLE);

これにより、アニメーションの速度が維持されます。アニメーションの停止/開始に関する私の当初の意図は、CPU が必要以上のことをしていないことを確認することでした。

于 2012-10-17T18:52:11.577 に答える
0

Androidに苦労して、次の解決策を見つけました:

start() および stop() メソッドを使用しないでください。

setVisible(true, true) を使用してアニメーションを開始します。

animImgView.setVisibility(View.VISIBLE);
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
frameAnim.setVisible(true, true);

setVisible(false, true ) を停止します (太字の trueに注意してください)。

final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
frameAnim.setVisible(false, true);
animImgView.setVisibility(View.GONE);
于 2015-06-25T16:10:23.340 に答える
0

可視性を変更するだけでなく、非表示時にアニメーションを停止するという当初の目標を達成するには:

//hide the animation
animImgView.setVisibility(View.GONE);

//stop animation
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
if (frameAnim.isRunning() == true)
{
    frameAnim.stop();
}

frameAnim.setVisible(false, false);



//start animation
final AnimationDrawable frameAnim = (AnimationDrawable)  animImgView.getBackground();
frameAnim.setVisible(true, true);
frameAnim.start();

//show animation
animImgView.setVisibility(View.VISIBLE);

ここでの違いは、ImageView が非表示/なくなっている間にアニメーションの開始と停止が発生することです。何らかの理由で、アニメーションが表示されているときにアニメーションを開始および停止すると、タイミングの問題が発生します。

出典: 私は自分でこの問題に遭遇し、この手法を使用して修正しました。

于 2015-03-10T14:43:19.753 に答える