前言,第一篇博客,记录所学、所想。
问题:八张不同的风扇图片,实现风扇旋转。要求:风扇的运转速度随着二氧化碳的值变化而变化,为0是关闭风扇旋转。在网上找了很久,都没有找到我想要的答案(可能是我不够仔细吧)所以只能自己写一个逻辑循环实现。如果不对的地方或者有更好的实现方法请留言。
1.思路:用循环不断更换图片,实现动画效果
//因为是用循环实现,所以开一个子线程
class Fs extends Thread {
private long aLong;//循环停止的时间
boolean fsgg;
private int js = 0;
private boolean dd = true;
private ImageView imageView;
private final int[] fs = new int[]{R.drawable.f1, R.drawable.f2, R.drawable.f3, R.drawable.f4, R.drawable.f5, R.drawable.f6, R.drawable.f7, R.drawable.f8};
public void init(ImageView imageView) {
aLong = 500;
fsgg = false;
this.imageView = imageView;
}
@Override
public void run() {
while (dd) {
Log.i("text", "外循环");
while (fsgg) {
if (js > 7) {
js = 0;
}
Log.i("text", "内循环");
Message message = new Message();
message.arg1 = js;
js++;
handler.sendMessage(message);
try {
Thread.sleep(aLong);
Log.i("text", "循环时间:" + aLong);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (dd && fsgg) {
Log.i("text", "关闭外循环");
dd = false;
}
if (!fsgg && !dd) {
Log.i("text", "开启外循环");
dd = true;
}
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private Handler handler = new Handler() {//因为子线程无法更新控件,所以用Handler更新。
@Override
public void handleMessage(Message msg) {
int zy = msg.arg1;
Log.i("text", "风扇的第" + String.valueOf(zy) + "张图");
imageView.setImageResource(fs[zy]);
}
};
public void on() {//开
fsgg = true;
}
public void off() {//关
fsgg = false;
}
public void setshijian(long aLong) {//用于设置循环停止时间,也就是速度
this.aLong = aLong;
}
我知道这样肯定写是有问题的,还麻烦。但我也找不出其他方法,暂时就先这样,至少可以实现我想用的效果。如果有更好的,更简单的实现方法,请一定告诉我。新萌一个勿喷。