我有一个蜡烛和火焰作为单独的图像视图.当用户点击火焰时,其可绘制资源设置为透明,意味着火焰已经被烧掉.
我也想在火焰被吹走时显示烟雾.为此,我有大约21张黑烟图像,可以快速显示,以便用户将其视为烟雾.这是我的代码在点击火焰时挂起(R.drawable.smoke_22是火焰的透明图像,R.drawable.candle_1是黄色火焰图像,标志是跟踪火焰当前是否被吹走.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);
}
Run Code Online (Sandbox Code Playgroud)
火焰确实熄灭并重复触摸,但我没有看到适当的烟雾动画
Mat*_*att 10
您可以简单地将for语句包装在while循环中,由布尔值引发: 只要您想要drawable动画,就将boolean设置为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);
}
Run Code Online (Sandbox Code Playgroud)
否则你可以创建一个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();
Run Code Online (Sandbox Code Playgroud)
我当然希望这会有所帮助,Happy Coding!
| 归档时间: |
|
| 查看次数: |
5226 次 |
| 最近记录: |