Android上setAlpha诡异问题

Mar 14, 2013

当有一次需要在imageView上使用setAlpha来改变当前view的透明度时,发现一个很2的问题.

float opacity = (float) (1.0 - ((float)currentTime/1000.0 - spot.originalStartTime)/FADE_OUT_DURATION);
imageView.setAlpha((int)(255.0*opacity));

在调试中发现,本应该这个imageView的alpha从1(完全不透明)降到0(透明),然后以后整个imageView应该就看不到了消失掉.

但是却发现imageView是从不透明到透明然后又从透明变回不透明。 这个甚是奇怪,因为这段代码在iOS上是木有问题的.

回头想了想,猜测可能是当opacity为负值时,android认为它跟正值一样,所以它显示为不透明了.

实验了一下,确实发现这个问题,opacity为负值时,它的最终表现是跟正值一样的. 吐血了 :(

所以又改了改代码

float opacity = (float) (1.0 - ((float)currentTime/1000.0 - spot.originalStartTime)/FADE_OUT_DURATION);
if(opacity < 0)opacity = 0;
hview.setAlpha((int)(255.0*opacity));	

终于正常了