我的Activity中有一个drawable对象。 API级别1中引入了drawable setAlpha()
,但API级别19(KitKat)中引入了getAlpha()
。是否有任何替代API或支持库来获取drawable的alpha / opacity值。
我也有NineOldAndroids库,但getAlpha()
仅适用于VIEWS。
答案 0 :(得分:6)
在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;
}
答案 1 :(得分:5)
将此库添加到build.gradle依赖项部分:
com.android.support:support-v4:24.0.0
下一个方法在API级别4及更高版本上可用:
DrawableCompat.getAlpha(Drawable d)
[修改] 注意 DrawableCompat.getAlpha
只返回0
以下19版本。See source code
答案 2 :(得分:-2)
试试这种方式,希望这可以帮助您解决问题。
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB){
v.setAlpha((Math.round(alpha*255)));
}else{
v.setAlpha(alpha);
}