在Android中往往會(huì)遇見(jiàn)需要切換顏色的場(chǎng)景,但如果直接從一種顏色直接跳轉(zhuǎn)到另一種,很可能因?yàn)樯实姆床钤斐缮驳那袚Q效果,這對(duì)于用戶是非常不友好的。
相比直接設(shè)置顏色,選擇使用一個(gè)屬性動(dòng)畫(huà),將當(dāng)前顏色和要變化的顏色作為屬性動(dòng)畫(huà)的值,對(duì)的,顏色是用16進(jìn)制數(shù)表示,因此也是int類型。
這里需要注意的是在動(dòng)畫(huà)中設(shè)置了 ArgbEvaluator這個(gè)參數(shù)。這個(gè)參數(shù)可以計(jì)算我們?cè)O(shè)置兩個(gè)顏色中間的過(guò)渡色,而通過(guò)屬性動(dòng)畫(huà)回調(diào)方法中不斷設(shè)置漸變顏色,即可得到一個(gè)相對(duì)流暢的色彩切換效果。
直接上代碼啦,簡(jiǎn)單的貼了一個(gè)點(diǎn)擊方法和屬性動(dòng)畫(huà)。另外在Linux上沒(méi)有ps如何制作gif...求指導(dǎo)
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){
//設(shè)置窗口顏色漸變動(dòng)畫(huà)
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();
}