#Android Sth. about Paint

Paint的setColor()setAlpha()是两个常用的方法,分别设置Paint的颜色和透明度,一般来说是没有问题的,但是当这两个方法同时使用的时候,就会出现冲突。

  • 如果先调用setAlpha(),后调用setColor(),那么alpha值并不会生效;
  • 反之,先调用setColor(),后调用setAlpha(),如果color中包含透明通道,那么setAlpha()的参数会覆盖color中透明通道的值。

猜想setAlpha()的实现是通过改变Paint.color的透明通道来改变Paint的透明度的

那么,如果需要实现同时设置带有透明通道的color和alpha,该怎么做呢?就是要先计算出最终的透明度,再设置。这里也可以调用Paint.setArgb()方法直接设置分量。

Demo

int color = 0x55000000;
int alpha = 100;

colorAlpha = Color.alpha(color);
colorAlpha = colorAlpha * alpha / 255;
mPaint.setARGB(colorAlpha, Color.red(color), Color.green(color), Color.blue(color));
cat_web

Cat 20151030