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

有这样一个场景:时间一个动画,使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位的十六进制;322进制数;
            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做&操作,获取一个字节的数据,然后根据动画的速度对色值分别做适当的改变后,再做左移操作,然后用|进行拼接即可完成渐变的逻辑。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值