Android中int类型的颜色值和AGGB的互相转化
2018-01-30 11:36
204 查看
有这样一个场景:时间一个动画,使View从一个颜色缓慢过渡到另外一种颜色,代码如下:
显然我们可以用ObjectAnimator不断改变View的backgroundColor属性来实现这个渐变效果。
ARGB中,每种色值占1个字节,共4个字节,32位;已知int类型的argb色值时,可以依次向右移动一定的位数来获取对应的色值,再与0xff做&操作,获取一个字节的数据,然后根据动画的速度对色值分别做适当的改变后,再做左移操作,然后用|进行拼接即可完成渐变的逻辑。
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做&操作,获取一个字节的数据,然后根据动画的速度对色值分别做适当的改变后,再做左移操作,然后用|进行拼接即可完成渐变的逻辑。
相关文章推荐
- android十六进制颜色代码转换为int类型数值
- Android中将十六进制 颜色代码 转换为int类型数值
- android 开发中将十六进制 颜色代码 转换为int类型数值 方法 :
- android 开发中将十六进制 颜色代码 转换为int类型数值
- Android中String类型的颜色值转换为int类型
- Android学习心得(19) --- short、byte、Hex、int、ULeb128类型转化Java源码
- JAVA String与double int 等primitive主数据类型 互相转化
- int与16进制argb表示颜色互相转换
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应
- 类型转化异常 Java Object转 int
- Android中 int 和 String 互相转换的多种方法
- Android中 int 和 String 互相转换的多种方法
- jsp 如何把session.getAttribute()的值转化成int类型
- android 颜色16进制转 int方法
- Android— Android中十六进制颜色字符串转int的方法
- java中string和int互相转化
- java如何将int类型的值转化成String类型的值?
- 从零开始学android开发-字符如何转换整形 string 转化为int
- 16进制字符串转化成int类型
- java中string和int互相转化