用逻辑实现控制风扇动画旋转的速度

前言,第一篇博客,记录所学、所想。

问题:八张不同的风扇图片,实现风扇旋转。要求:风扇的运转速度随着二氧化碳的值变化而变化,为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;
    }

我知道这样肯定写是有问题的,还麻烦。但我也找不出其他方法,暂时就先这样,至少可以实现我想用的效果。如果有更好的,更简单的实现方法,请一定告诉我。新萌一个勿喷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值