特殊纪念日Android APP内设置黑灰色背景

今天在学习鸿洋大神的博客的时候看到了相关文章,于是动手实现了一下;

当在特殊的某一个日子,我们会表达我们的悼念之情,APP会在某一日设置成黑灰色:

实现:

//设置整个APP的所有活动页面变为黑白色;屏蔽掉色彩,特殊节日需要用到;
    private void initGrayScreen(){
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        paint.setColorFilter(new ColorMatrixColorFilter(cm));
        getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
    }

我想很多的网上提示都是这段代码;那么我也没有必要再来记录这篇博客了;

我们知道把这段代码放在自己定义的基础类BaseActivity里面就OK了,通过一个值进行判断是否显示灰黑色:

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置活动页面的布局;
        setContentView(getLayoutId());
        //实例化MVP中的P用来连接控制Model与View;
        initPresenter();
        //初始化控件,一般在BaseActivity中通过ButterKnife来绑定,所以该方法内部一般我们初始化界面相关的操作
        initViews();
        //获取数据
        getDataFromServer();
        if(MyApplication.getSpecialDay() != 0){
            //所有界面变成灰色
            initGrayScreen();
        }
    }
    //设置整个APP的所有活动页面变为黑白色;屏蔽掉色彩,特殊节日需要用到;
    private void initGrayScreen(){
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        paint.setColorFilter(new ColorMatrixColorFilter(cm));
        getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
    }
}

可是我们怎么从接口中获取到这个值并在用户打开APP之前完成所有页面的黑灰初始化?
经过多次试验,我把网络请求的接口放在了欢迎页中进行;
或许这样会造成耗时,但是我们只获取一个值,感觉耗时并不会特别严重,而浪费个十几毫秒并不影响用户的体验;
如果说我们在进入页面再进行请求就会发生各种各样的问题;因为如果一旦进入页面了,所有的Activity都已经是继承了BaseActivity的,我们还没有完成里面方法的设置;

public class WelcomeActivity extends AppCompatActivity {

    //获取数据的Manager管理类实例 进行请求数据操作
    private DataManager dataManager;
    //获取到的book数据对象
    private Book mBook;
    //构造函数,实例化网络请求的单例
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        dataManager = DataManager.getInstance();
        dataManager.getSpceialDay("11","22")
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(@NonNull Disposable disposable) throws Exception {
                        //请求加入管理,统一管理订阅,防止内存泄露
                        //addDisposable(disposable);
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Book>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                    }
                    @Override
                    public void onNext(@NonNull Book book) {
                        mBook = book;
                    }
                    // 此处注意:onComplete和onError只会调用其中一个,不可能同时被触发
                    @Override
                    public void onError(@NonNull Throwable e) {
                        // 在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出
                        Log.d("22ss", e.toString());
                        e.printStackTrace();
                        //getMvpView().onError("请求失败!!");
                        //getMvpView().hideProgressDialog();
                    }
                    @Override
                    public void onComplete() {
                        // onComplete方法和onError方法是互斥的,
                        // RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
                        Log.d("22ss", "onComplete");
                            /*if (mBook != null){setSpecialDay
                                getMvpView().onSuccess(mBook);
                            }*/
                            //这里进行全局值设置,在BaseActivity中进行判断;
                        MyApplication.setSpecialDay(mBook.getCount());
                        Logger.e("welecome");
                        // 隐藏进度
                        //getMvpView().hideProgressDialog();
                    }
                });

        //接受这个APP的广播;
        Handler handler = new Handler();
        //延迟2000毫秒执行的线程; 启动主页面;
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(WelcomeActivity.this, BookActivity.class);
                startActivity(intent);
                //防止首页点返回键,跳回到欢迎界面;
                finish();
            }
        }, 2000);
    }
}

不知道大厂都是怎么实现的,小白我只能自己摸索了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值