我的 Activity 中有一个可绘制对象。可绘制对象的 setAlpha()
是在 API 级别 1 中引入的,而 getAlpha()
是在 API 级别 19 (KitKat) 中引入的。是否有任何替代 API 或支持库来获取可绘制对象的 alpha/不透明度值。
我还有 NineOldAndroids 库,但 getAlpha()
仅适用于 VIEWS。
最佳答案
在 API 19 之前,没有通用的方法来获取 Drawable 的 alpha 值。 不管怎样,根据你有什么样的Drawable,你可以查看源代码以使用变通方法扣除alpha。
例如查看 ColorDrawable很容易看出您可以在 Kitkat 之前移植实现。
@Override
public int getAlpha() {
return mColorState.mUseColor >>> 24;
}
所以 drawable.getAlpha()
变成了 drawble.getColor() >>> 24
编辑:
这里是一个未完成的compat方法尝试,我会尝试及时更新它:
public static int getAlphaCompat( Drawable drawable ) {
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT)
return drawable.getAlpha();
if( drawable instanceof ColorDrawable ) {
return ((ColorDrawable) drawable).getColor() >>> 24;
} else if( drawable instanceof BitmapDrawable ) {
return ((BitmapDrawable) drawable).getPaint().getAlpha();
} else if( drawable instanceof RotateDrawable ) {
return getAlphaCompat( ((RotateDrawable) drawable).getDrawable() );
} else if( drawable instanceof ScaleDrawable ) {
return getAlphaCompat( ((ScaleDrawable) drawable).getDrawable() );
} else if( drawable instanceof ClipDrawable ) {
//TODO: possible with reflection
} else if( drawable instanceof ShapeDrawable ) {
//TODO: possible with reflection
} else if( drawable instanceof DrawableContainer ) {
//TODO: possible with reflection
} else if( drawable instanceof GradientDrawable ) {
//TODO: possible with reflection
}
return -1;
}
关于android - 如何获取小于 19 的 Drawable 的 alpha 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25621126/