Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 背景设置为可绘制时如何从按钮获取颜色_Android_Xml_Kotlin_Drawable - Fatal编程技术网

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