在Android中往往会遇见需要切换颜色的场景,但如果直接从一种颜色直接跳转到另一种,很可能因为色彩的反差造成生硬的切换效果,这对于用户是非常不友好的。
相比直接设置颜色,选择使用一个属性动画,将当前颜色和要变化的颜色作为属性动画的值,对的,颜色是用16进制数表示,因此也是int类型。
这里需要注意的是在动画中设置了 ArgbEvaluator
这个参数。这个参数可以计算我们设置两个颜色中间的过渡色,而通过属性动画回调方法中不断设置渐变颜色,即可得到一个相对流畅的色彩切换效果。
直接上代码啦,简单的贴了一个点击方法和属性动画。另外在Linux上没有ps如何制作gif...求指导
public void changeColorClick(View view) {
switch (view.getId()){
case R.id.yellow :
colorAnimator(Color.BLUE,Color.YELLOW,background);
// background.setBackgroundColor(Color.RED);
break;
case R.id.blue :
colorAnimator(Color.YELLOW,Color.BLUE,background);
// background.setBackgroundColor(Color.BLUE);
break;
}
}
private void colorAnimator(int mPreColor, int mCurrColor, final View view){
//设置窗口颜色渐变动画
ValueAnimator animator = ValueAnimator.ofInt(mPreColor, mCurrColor);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int color = (int) animation.getAnimatedValue();
view.setBackgroundColor(color);
}
});
animator.setDuration(500);
animator.setEvaluator(new ArgbEvaluator());
animator.start();
}