zoukankan      html  css  js  c++  java
  • App启动页倒计时功能

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6753418.html 

    示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写

    示例图:

    话不多说,实现方式如下:

    1.导入依赖库

    ① RxJava: Reactive Extensions for the JVM

    compile 'io.reactivex:rxjava:1.2.9'
    compile 'io.reactivex:rxandroid:1.2.1'

    ② RxLifecycle

    compile 'com.trello:rxlifecycle:1.0'
    compile 'com.trello:rxlifecycle-components:1.0'

    ③ Data-Binding

    dataBinding {
        enabled = true
    }

    2.代码编写(关键代码)

    ① 自定义接口View

    public interface BaseView {
    
        <T> LifecycleTransformer<T> bindToLife();
    
    }

    ② 创建一个Helper类,用来进行倒计时操作

    public final class RxHelper {
    
        private RxHelper() {
            throw new AssertionError();
        }
    
        /**
         * 倒计时
         */
        public static Observable<Integer> countdown(int time) {
            if (time < 0) {
                time = 0;
            }
            final int countTime = time;
    
            return Observable.interval(0, 1, TimeUnit.SECONDS)
                    .map(new Func1<Long, Integer>() {
                        @Override
                        public Integer call(Long increaseTime) {
                            return countTime - increaseTime.intValue();
                        }
                    })
                    .take(countTime + 1)
                    .subscribeOn(Schedulers.io())
                    .unsubscribeOn(Schedulers.io())
                    .subscribeOn(AndroidSchedulers.mainThread())
                    .observeOn(AndroidSchedulers.mainThread());
        }
    
    }

    ③ 自定义方法:实现异步加载

    private void init() {
        RxHelper.countdown(5)
                .compose(this.<Integer>bindToLife())
                .subscribe(new Subscriber<Integer>() {
                    @Override
                    public void onCompleted() {
                        doSkip();
                    }
    
                    @Override
                    public void onError(Throwable e) {
                        doSkip();
                    }
    
                    @Override
                    public void onNext(Integer integer) {
                        mBinding.sbSkip.setText("跳过 " + integer);
                    }
                });
    }

    ④ 自定义方法:实现跳转

    private void doSkip() {
        if (!mIsSkip) {
            mIsSkip = true;
            finish();
            startActivity(new Intent(SplashActivity.this, MainActivity.class));
            overridePendingTransition(R.anim.hold, R.anim.zoom_in_exit);
        }
    }

    ⑤ 设置主题样式为全屏

    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowFullscreen">true</item>
    </style>

    示例Demo下载:App启动页倒计时功能

    关注我的新浪微博,请认准黄V认证,获取最新安卓开发资讯。

    关注科技评论家,领略科技、创新、教育以及最大化人类智慧与想象力!

  • 相关阅读:
    基于alpine定制常用命令镜像
    sudo cat > EOF权限问题
    Nginx AWS ELB 域名解析后端502问题
    harbor使用aws s3存储
    Tomcat 优化和改进
    webservice 使用JaxWsDynamicClientFactory报空指针异常
    spring boot 集成 Apache CXF 调用 .NET 服务端 WebService
    eclipse launching workspace太慢的解决方法
    Remote System Explorer Operation卡死Eclipse解决方案
    同一个Tomcat 同一个端口 部署多个项目
  • 原文地址:https://www.cnblogs.com/cnwutianhao/p/6753418.html
Copyright © 2011-2022 走看看