Android 背景设置为可绘制时如何从按钮获取颜色
我有一个Android 背景设置为可绘制时如何从按钮获取颜色,android,xml,kotlin,drawable,Android,Xml,Kotlin,Drawable,我有一个 我需要在代码中获取按钮的颜色。我试过的是 val drawable = btn.getBackground().mutate() as GradientDrawable 如何从该绘图表中获取颜色?使用: val color = (btn.background as? GradientDrawable)?.color?.defaultColor 编辑 但是) 仅适用于API 24及以上版本。您应该检查Build.VERSION.SDK\u INT>=Build.VERSION\u C
我需要在代码中获取按钮的颜色。我试过的是
val drawable = btn.getBackground().mutate() as GradientDrawable
如何从该绘图表中获取颜色?使用:
val color = (btn.background as? GradientDrawable)?.color?.defaultColor
编辑
但是)
仅适用于API 24及以上版本。您应该检查Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.N
:
val color = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
(btn.background as? GradientDrawable)?.color?.defaultColor
} else null
尝试:
为什么不将可绘制图像转换为位图(链接:),然后将像素置于其中心?这可能不是最快的方法,但却是最兼容的方法之一(因为渐变、颜色或其他类型的可绘制位图都被展平为兼容的位图,您不需要处理这些差异)测试用例
可绘制按钮颜色=(可绘制)按钮。getBackground()
@NileshRathod如果GradientDrawable
不能强制转换为ColorDrawable
你应该使用ShapeDrawable
而不是GradientDrawable
@MuzammilHusnain你能在这里告诉我更多关于如何使用ShapeDrawable的信息吗java.lang.ClassCastException:android.graphics.drawable.GradientDrawable无法强制转换为android.graphics.drawable.ShapeDrawable:Ljava/lang/ClassCastException代码>异常即将发生它正在抛出java.lang.NoSuchMethodError:找不到方法:MemberDescription(ownerInternalName=android/graphics/drawable/GradientDrawable,name=getColor,desc=()Landroid/content/res/ColorStateList;,isStatic=false)
val color = (btn.background as? GradientDrawable)?.color?.defaultColor
val color = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
(btn.background as? GradientDrawable)?.color?.defaultColor
} else null
val color = (btn.background as? ShapeDrawable)?.paint.color