Android 如何获得可绘制波纹按钮的颜色

Android 如何获得可绘制波纹按钮的颜色,android,drawable,Android,Drawable,我有各种各样的按钮,我想获取它们的背景色,在彩色可绘制中获取背景色很容易,但在ripple可绘制中却不容易,我如何才能从ripple可绘制中获取背景色。请查看以下安卓中的ripple effect示例 试试这个: RippleDrawable rippleDrawable = (RippleDrawable) button.getBackground(); Drawable.ConstantState state = rippleDrawable.getConstantState(); t

我有各种各样的按钮,我想获取它们的背景色,在彩色可绘制中获取背景色很容易,但在ripple可绘制中却不容易,我如何才能从ripple可绘制中获取背景色。

请查看以下安卓中的ripple effect示例

试试这个:

 RippleDrawable rippleDrawable = (RippleDrawable) button.getBackground();
 Drawable.ConstantState state = rippleDrawable.getConstantState();
 try {
     Field colorField = state.getClass().getDeclaredField("mColor");
     colorField.setAccessible(true);
     ColorStateList colorStateList = (ColorStateList) colorField.get(state);
     int rippleColor = colorStateList.getDefaultColor();
  } catch (NoSuchFieldException e) {
      e.printStackTrace();
  } catch (IllegalAccessException e) {
      e.printStackTrace();
  }

我发现的解决方案是从一个新制作的应用程序清单中删除条目——特别是查看样式、主题和颜色——比较旧的工作应用程序和新的应用程序,以确定嫌疑犯。
RippleDrawable随后替换为原来的ColorDrawable,.getColor()再次工作。

我不想要ripple动画,我希望获得默认按钮背景颜色的背景颜色,该颜色看起来接近于#ffd6d7d7,您的代码返回#1f000000。我如何选择正确的状态(点击按钮前的状态)?thx@rockhammer您可以尝试
ColorStateList.getColorForState
thx以获取建议。。。我花了一段时间才弄明白如何使用
.getState()
&
.getColorForState()
。插入
int[]statesOther=RippledRavable.getState()
before
try
try
中的for循环执行
colorsother[i]=colorStateList.getColorForState(新的int[]{statesOther[i]},0)
,整个
颜色Sother[]
数组和
rippleColor
返回#1000000。然后我想可能是因为我在
onClick()
中有这个代码,所以它只会显示与被点击相关的状态。即使我将此代码放入
onCreate()
onWindowFocusChanged()
,我也只得到了#1000000我也有同样的问题,我得到的是涟漪效果的颜色,但我想要的是以RippleDrawable为背景的AppCompative按钮的颜色。可能颜色没有存储在RippleDrawable的ColorStateList中,但是它在哪里呢。。?如果我将背景设置为null,则按钮将变为透明。因此颜色在RippleDrawable中的某个位置。
getDefaultColor
返回一个像352321535这样的大数字。如何将此数字转换为颜色?