做项目中踩过的一个坑,记录一下
需求是先把ImageView设置成透明不可见,然后在某个条件下再设置成可见,代码如下
1 | mImageView.setAlpha(0); // 设置成透明 |
结果是设置成透明可以,但是要再设置成不透明显示控件却死活不可以,后来改成如下代码就可以了
1 | mImageView.setAlpha(0f); // 设置成透明 |
原来setAlpha(0)和setAlpha(0f)分别调用的是不同的方法
setAlpha(int)
这是在ImageView中定义的方法,已经被废弃了,取值范围是0-255,
0表示透明
255表示不透明
所以如果要设置ImageView为不透明,正确的值是255,而不是1
1 | /** |
setAlpha(float)
这其实是在ImageView的父类View中定义的方法,推荐用此方法,取值范围为0.0f-1.0f
0.0f表示透明
1.0f表示不透明
1 | /** |
setImageAlpha(int)
看源码可知setImageAlpha(int)实际内部调用的是setAlpha(int),所以取值返回也是0-255,表示从透明到不透明
1 | /** |
总结
- setAlpha(float)推荐使用,取值范围为0.0f-1.0f,表示透明到不透明
- setAlpha(int),已废弃,不推荐使用,取值范围为1-255,表示透明到不透明
- setImageAlpha(int),内部实际调用setAlpha(int),取值范围也是1-255,表示透明到不透明