rxjava2代码实战4--interval,take操作符clipdrawable制作图片进度条

来源:互联网 发布:matlab find(矩阵) 编辑:程序博客网 时间:2024/06/12 18:57

interval:延迟执行一段逻辑或者间隔执行一段逻辑
take:截取前n个事件

代码地址:

GitHub - GodisGod/Rxjava2Testhttps://github.com/GodisGod/Rxjava2Test

使用interval制作一个图片进度条

效果图:

interval

activity代码:

public class IntervalTakeComposeActivity extends AppCompatActivity {    private ImageView imgLevelProgress;    private ClipDrawable clipDrawable;    private Button btnStart;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_interval_take_compose);        imgLevelProgress = (ImageView) findViewById(R.id.img_level_progress);        clipDrawable = (ClipDrawable) imgLevelProgress.getDrawable();        btnStart = (Button) findViewById(R.id.btn_start);        btnStart.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                setLevelProgress(80, 100);//0 - 10000            }        });    }    /**     * 设置等级的进度     *     * @param progress 已有的经验     * @param all      升级需要的总经验     */    private void setLevelProgress(long progress, long all) {        //level在0-10000之间,0表示完全裁剪,10000表示完全不裁剪。设置的值越大,裁剪的范围就越小。        final int curProgress = (int) (((float) progress / all) * 10000);        Observable.interval(10, TimeUnit.MILLISECONDS)//每隔10ms输出一次                .take(curProgress / 50)//0 - 8000/200  - -> 0 - 40  //减小输出次数,这样就不用输出8000次,而是只输出40次了,10000一共输出200次,输出次数多可以让进度变化看起来更加连贯                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Consumer<Long>() {                    @Override                    public void accept(Long aLong) throws Exception {                        clipDrawable.setLevel((int) ((aLong + 1) * 50));//10000一共输出200次,每次增加50                    }                }, new Consumer<Throwable>() {                    @Override                    public void accept(Throwable throwable) throws Exception {                        clipDrawable.setLevel(1);                    }                });    }}
原创粉丝点击