背景渐变(抄自原生DeskClock)

使用:

public class MainActivity extends BaseActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void color(View v) {
        switch (v.getId()) {
            case R.id.c1:
                adjustAppColor(Color.RED, true);
                break;
            case R.id.c2:
                adjustAppColor(Color.YELLOW, true);
                break;
            case R.id.c3:
                adjustAppColor(Color.BLUE, true);
                break;
        }
    }
}

package com.android.testbackground;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.ViewConfiguration;

public class BaseActivity extends AppCompatActivity {
    private ColorDrawable mBackGround;
    private ValueAnimator valueAnimator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    protected void adjustAppColor(@ColorInt int color, boolean animal) {
        if (mBackGround == null) {
            mBackGround = new ColorDrawable(color);
            getWindow().setBackgroundDrawable(mBackGround);
            if (hasNavigationBar()) {
                getWindow().setNavigationBarColor(color);
            }
            return;
        }
        int currentColor = mBackGround.getColor();
        if (valueAnimator != null) {
            valueAnimator.cancel();
            valueAnimator = null;
        }
        if (currentColor != color) {
            if (animal) {
                valueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), currentColor, color);
                valueAnimator.setDuration(3000);
                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        int color = (int) animation.getAnimatedValue();
                        mBackGround.setColor(color);
                        if (hasNavigationBar()) {
                            getWindow().setNavigationBarColor(color);
                        }
                    }
                });

                valueAnimator.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        super.onAnimationEnd(animation);
                        valueAnimator = null;
                    }
                });
                valueAnimator.start();
            } else {
                if (hasNavigationBar()) {
                    mBackGround.setColor(color);
                    getWindow().setNavigationBarColor(color);
                }
            }


        }
    }

    public boolean hasNavigationBar() {
        boolean hasMenuKey = ViewConfiguration.get(this)
                .hasPermanentMenuKey();
        boolean hasBackKey = KeyCharacterMap
                .deviceHasKey(KeyEvent.KEYCODE_BACK);

        if (!hasMenuKey && !hasBackKey) {
            return true;
        }
        return false;
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (valueAnimator != null) {
            valueAnimator.cancel();
            valueAnimator = null;
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值