使用:
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;
}
}
}