Android 如何获取api小于19的可绘制图形的alpha值
我的活动中有一个可绘制的对象Android 如何获取api小于19的可绘制图形的alpha值,android,android-drawable,alpha,android-api-levels,Android,Android Drawable,Alpha,Android Api Levels,我的活动中有一个可绘制的对象setAlpha(),但API级别19(KitKat)中引入了getAlpha()。是否有其他API或支持库来获取可绘制图像的alpha/opacity值 我还有NineolandRoids库,但是getAlpha()仅适用于视图。试试这种方法,希望这能帮助您解决问题 if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB){ v.setAlpha((Math.roun
getAlpha()
。是否有其他API或支持库来获取可绘制图像的alpha/opacity值
我还有NineolandRoids库,但是
getAlpha()
仅适用于视图。试试这种方法,希望这能帮助您解决问题
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB){
v.setAlpha((Math.round(alpha*255)));
}else{
v.setAlpha(alpha);
}
if(Build.VERSION.SDK_INT没有获取API 19之前可绘制版本的alpha值的通用方法。
无论如何,根据您拥有的绘图类型,您可以检查源代码,通过解决方法扣除alpha
例如,通过查看源代码,很容易看出您可以在Kitkat之前移植实现
@Override
public int getAlpha() {
return mColorState.mUseColor >>> 24;
}
因此drawable.getAlpha()
变成drawable.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 dependencies部分:
com.android.support:support-v4:24.0.0
下一种方法在API级别4及更高级别上可用:
DrawableCompat.getAlpha(Drawable d)
[编辑]注意DrawableCompat.getAlpha
对于19以下的版本只返回0
。我要求获取alpha值,但没有设置它。setAlpha
可从API 1获得。对于19之前的/KitKat SDK,此实现只返回0;
-注意这不会返回实际值在KitKat之前插入alpha值。我建议在第一个位置插入if(VERSION.SDK\u INT>=VERSION\u CODES.KitKat)返回drawable.getAlpha();
。并且返回innerDrawable==null?255:getAlphaCompat(innerDrawable)
用于可旋转的
和可缩放的
其中innerDrawable
是drawable.getDrawable()
。