您的位置:首页 > 移动开发 > Android开发

Android中int类型的颜色值和AGGB的互相转化

2018-01-30 11:36 204 查看
有这样一个场景:时间一个动画,使View从一个颜色缓慢过渡到另外一种颜色,代码如下:

static ObjectAnimator createArgbAnimator(View view, String propertyName, int startColor, int endColor) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return ObjectAnimator.ofObject(view, propertyName, new TypeEvaluator() {
@Override
public Object evaluate(float fraction, Object startValue, Object endValue) {
int startInt = (Integer) startValue;

// 共4个字节: 如 0x00000000; 8位的十六进制;32位2进制数;
int startA = (startInt >> 24) & 0xff; // 右移等效于与操作; 0x
int startR = (startInt >> 16) & 0xff;
int startG = (startInt >> 8) & 0xff;
int startB = startInt & 0xff;

int endInt = (Integer) endValue;

// &操作获取一个字节的数据;
int endA = (endInt >> 24) & 0xff;
int endR = (endInt >> 16) & 0xff;
int endG = (endInt >> 8) & 0xff;
int endB = endInt & 0xff;

// 数据的拼接;
return (startA + (int)(fraction * (endA - startA))) << 24 |
(startR + (int)(fraction * (endR - startR))) << 16 |
(startG + (int)(fraction * (endG - startG))) << 8 |
(startB + (int)(fraction * (endB - startB)));
}
}, startColor, endColor);
} else {
return ObjectAnimator.ofArgb(view, propertyName, startColor, endColor);
}
}

显然我们可以用ObjectAnimator不断改变View的backgroundColor属性来实现这个渐变效果。

ARGB中,每种色值占1个字节,共4个字节,32位;已知int类型的argb色值时,可以依次向右移动一定的位数来获取对应的色值,再与0xff做&操作,获取一个字节的数据,然后根据动画的速度对色值分别做适当的改变后,再做左移操作,然后用|进行拼接即可完成渐变的逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ObjectAnimator AGRB