2

我的活动中有一个可绘制对象。setAlpha()for drawable 在 API 级别 1getAlpha()中引入,但在 API 级别 19(KitKat)中引入。是否有任何替代 API 或支持库来获取可绘制对象的 alpha/opacity 值。

而且我还有 NineOldAndroids 库,但getAlpha()仅适用于 VIEWS。

4

3 回答 3

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;
}
于 2015-01-19T13:54:33.027 回答
5

将此库添加到 build.gradle 依赖项部分:

com.android.support:support-v4:24.0.0

下一个方法在 API 级别 4 及更高级别上可用:

DrawableCompat.getAlpha(Drawable d)

[编辑]低于 19 的版本只返回注意。 参见源代码DrawableCompat.getAlpha0

于 2016-07-15T20:34:08.310 回答
-2

试试这个方法,希望这能帮助你解决你的问题。

        if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB){
            v.setAlpha((Math.round(alpha*255)));
        }else{
            v.setAlpha(alpha);
        }
于 2014-09-02T14:15:10.707 回答