我的活动中有一个可绘制对象。setAlpha()
for drawable 在 API 级别 1getAlpha()
中引入,但在 API 级别 19(KitKat)中引入。是否有任何替代 API 或支持库来获取可绘制对象的 alpha/opacity 值。
而且我还有 NineOldAndroids 库,但getAlpha()
仅适用于 VIEWS。
我的活动中有一个可绘制对象。setAlpha()
for drawable 在 API 级别 1getAlpha()
中引入,但在 API 级别 19(KitKat)中引入。是否有任何替代 API 或支持库来获取可绘制对象的 alpha/opacity 值。
而且我还有 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;
}
将此库添加到 build.gradle 依赖项部分:
com.android.support:support-v4:24.0.0
下一个方法在 API 级别 4 及更高级别上可用:
DrawableCompat.getAlpha(Drawable d)
[编辑]低于 19 的版本只返回注意。 参见源代码DrawableCompat.getAlpha
0
试试这个方法,希望这能帮助你解决你的问题。
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB){
v.setAlpha((Math.round(alpha*255)));
}else{
v.setAlpha(alpha);
}