gpt4 book ai didi

android - 在 ImageView 中显示连续的图像序列

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:12 25 4
gpt4 key购买 nike

我有一个蜡烛和火焰作为单独的 ImageView 。当用户点击火焰时,其可绘制资源将设置为透明,这意味着火焰已经熄灭。

我还想展示火焰被吹灭时冒出的烟。为此,我有大约 21 张黑烟图像,可以按快速顺序显示,以便用户将其视为烟雾。这是我的代码,它在点击火焰时挂起(R.drawable.smoke_22 是火焰的透明图像,R.drawable.candle_1 是黄色火焰图像,flag 用于跟踪火焰当前是否被吹灭。flag= flase 表示火焰仍在燃烧):

int[] smokeImages = { R.drawable.smoke_1, R.drawable.smoke_2,
R.drawable.smoke_3, R.drawable.smoke_4, R.drawable.smoke_5,
R.drawable.smoke_6, R.drawable.smoke_7, R.drawable.smoke_8,
R.drawable.smoke_9, R.drawable.smoke_10, R.drawable.smoke_11,
R.drawable.smoke_12, R.drawable.smoke_13, R.drawable.smoke_14,
R.drawable.smoke_15, R.drawable.smoke_16, R.drawable.smoke_17,
R.drawable.smoke_18, R.drawable.smoke_19, R.drawable.smoke_20,
R.drawable.smoke_21 };


this.flamImageView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (flag) {
flamImageView.setImageDrawable(getResources().getDrawable(
R.drawable.smoke_22));
flag = false;
startTimer();
} else {
flamImageView.setImageDrawable(getResources().getDrawable(
R.drawable.candle_1));
flag = true;
smokemageView.setImageResource(R.drawable.smoke_22);
}
}
});
}

private void startTimer() {
for (int i = 0; i < 21; i++) {
try {
Thread.sleep(250);
smokemageView.setImageResource(smokeImages[i]);
} catch (InterruptedException localInterruptedException) {
}
}
smokemageView.setImageResource(R.drawable.smoke_22);
}

火焰确实熄灭并在重复触摸时重新出现,但我没有看到正确的烟雾动画

最佳答案

您可以简单地将您的 for 语句包装在一个 while 循环中,由一个 bool 值触发:每当您希望 drawable 设置动画时,只需将 bool 值设置为 true。

private void startTimer() {

while (timing) {
for (int i = 0; i < 21; i++) {
try {
Thread.sleep(250);
smokemageView.setImageResource(smokeImages[i]);
} catch (InterruptedException localInterruptedException) {
}
}
}
smokemageView.setImageResource(R.drawable.smoke_22);
}

否则您可以创建一个 AnimationDrawable 对象:(可能是更简单、更防错的方法)

AnimationDrawable anim = new AnimationDrawable();
anim.addFrame(
getResources().getDrawable(R.drawable.smoke_1),
250);
anim.addFrame(
getResources().getDrawable(R.drawable.smoke_2),
250);
anim.addFrame(
getResources().getDrawable(R.drawable.smoke_3),
250);
anim.addFrame(
getResources().getDrawable(R.drawable.smoke_4),
250);

//......So on, so forth until you have a satisfying animation sequence


//set ImageView to AnimatedDrawable
smokemageView.setImageDrawable(anim);

//if you want the animation to loop, set false
anim.setOneShot(false);
anim.start();

我当然希望这对您有所帮助,祝您编码愉快!

关于android - 在 ImageView 中显示连续的图像序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200341/

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