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

我的活动中有一个可绘制的对象setAlpha(),但API级别19(KitKat)中引入了
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()