gpt4 book ai didi

android - 如何获取小于 19 的 Drawable 的 alpha 值

转载 作者:太空狗 更新时间:2023-10-29 15:46:08 24 4
gpt4 key购买 nike

我的 Activity 中有一个可绘制对象。可绘制对象的 setAlpha() 是在 API 级别 1 中引入的,而 getAlpha() 是在 API 级别 19 (KitKat) 中引入的。是否有任何替代 API 或支持库来获取可绘制对象的 alpha/不透明度值。

我还有 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;
}

关于android - 如何获取小于 19 的 Drawable 的 alpha 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25621126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com