1. 程式人生 > >背景漸變(抄自原生DeskClock)

背景漸變(抄自原生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; } } }