gpt4 book ai didi

java - 暂停 AnimationDrawable 并从同一帧恢复

转载 作者:行者123 更新时间:2023-12-05 06:40:46 31 4
gpt4 key购买 nike

我正在尝试使用 AnimationDrawable 为一组图像制作动画。用户应该能够通过单击按钮暂停/恢复动画。我正在这样做,使用 setVisible(boolean visible, boolean restart)。不完全确定我是否正确理解文档,但每次按下暂停键时,动画都会从头开始。

有没有办法从同一帧恢复动画?

来自 AnimationDrawable API :

...If restart is false, the drawable will resume from the most recent frame

明确一点:

activityAnimation.setVisible(false, false); 应该停止动画。

activityAnimation.setVisible(true, false); 应该从同一帧恢复动画(它没有)。


这是我的代码:

动画 start()onWindowFocusChanged 中调用。

动画和按钮在 onCreate 中创建:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);

ImageView activityImage = (ImageView) findViewById(R.id.activity_image);
activityImage.setBackgroundResource(R.drawable.anim);
activityAnimation = (AnimationDrawable) activityImage.getBackground();

....
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageButton b = (ImageButton) v;
if ((Integer)b.getTag() == R.drawable.pause) {
b.setImageResource(R.drawable.play);
b.setTag(R.drawable.play);
activityAnimation.setVisible(false, false);
} else {
b.setImageResource(R.drawable.pause);
b.setTag(R.drawable.pause);
activityAnimation.setVisible(true, false);
}
}
});...
}

这是XML文件的内容

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">

<item android:drawable="@drawable/one" android:duration="1000" />
<item android:drawable="@drawable/two" android:duration="1000" />
<item android:drawable="@drawable/three" android:duration="1000" />
<item android:drawable="@drawable/four" android:duration="1000" />

</animation-list>

我已经注意到其中的一些旧帖子,但没有找到答案。

How to reset AnimationDrawable (这个问题的另一面)

How do I pause frame animation using AnimationDrawable? [Closed]

最佳答案

要暂停和恢复 AnimationDrawable,只需对其进行自定义并仅使用一个变量进行处理即可。

class CustomAnimationDrawable1() : AnimationDrawable() {

private var finished = false
private var animationFinishListener: AnimationFinishListener? = null
private var isPause = false
private var currentFrame = 0

fun setFinishListener(animationFinishListener: AnimationFinishListener?) {
this.animationFinishListener = animationFinishListener
}

interface AnimationFinishListener {
fun onAnimationFinished()
}


override fun selectDrawable(index: Int): Boolean {
val ret = if (isPause) {
super.selectDrawable(currentFrame)
} else {
super.selectDrawable(index)
}

if (!isPause) {
currentFrame = index
if (index == numberOfFrames - 1) {
if (!finished && ret && !isOneShot) {
finished = true
if (animationFinishListener != null) animationFinishListener!!.onAnimationFinished()
}
}
}
return ret
}

fun pause() {
isPause = true
}

fun resume() {
isPause = false
}

关于java - 暂停 AnimationDrawable 并从同一帧恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952444/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com