AnimationDrawable帧持续时间问题

5

我需要逐帧创建动画,但是遇到了一些问题。我有30个png图像组成我的动画,我使用以下代码加载我的AnimationDrawable:

        mCurrentAnimation = new AnimationDrawable();
        mCurrentAnimation.setOneShot(true);
        int resId;
        for (int j = 1; j < 31; j++)
        {                  
            resId = getResources().getIdentifier("resName", "drawable", "com.mindcolorstest.main");
            mCurrentAnimation.addFrame(getResources().getDrawable(resId), 1);
        }

逻辑上,“mCurrentAnimation.start()”是启动动画的命令。 在mdpi设备上,动画可以正常运行,但我在hdpi模拟器或设备上遇到了一些问题,每帧持续时间有点长。如果我减少每帧的持续时间(无论是在mdpi还是hdpi设备上),动画速度并不会变快,似乎每帧都存在最小持续时间。 你有什么技巧和建议吗? 我不知道应该怎么做Q_Q 无论如何感谢您的帮助


为什么你在这里使用for循环,图像已经按照定义的时间自动加载了... - Lalit Poptani
for循环仅用于在AnimationDrawable对象中加载图像... mCurrentAnimation.start()将启动图像背景切换并创建结果动画。 - Luca Looz
我猜那是错误的方式,你正在哪个小部件上显示动画? - Lalit Poptani
((ImageView)findViewById(R.id.imageAnim)).setBackgroundDrawable(mCurrentAnimation); - Luca Looz
希望你已经将动画的xml文件放在res/anim文件夹中。 - Lalit Poptani
1个回答

0

我同意这个观点,我也使用XML动画列表来实现类似的效果,即使在S4上,每帧的动画时间也比我设置的长得多(我已将每帧的持续时间设置为3毫秒)。
我测量了30个周期和85帧,平均每帧最少需要16.16毫秒

这可能与DrawableContaineranimate()函数中的scheduleSelf(mAnimationRunnable, now + 1000/60)有关。只是一个猜测,因为1000/60 = 16.66,应该转换为16作为int/long类型。

但这也可能来自代码或硬件速度的其他限制。
我没有检查这行代码是否被调用并导致了这个问题,因为我无法在那里打断点。
然而,我认为在现实中没有显示器能够达到如此快的速度,所以它看起来很聪明。


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