Android 如何获得可绘制波纹按钮的颜色
我有各种各样的按钮,我想获取它们的背景色,在彩色可绘制中获取背景色很容易,但在ripple可绘制中却不容易,我如何才能从ripple可绘制中获取背景色。请查看以下安卓中的ripple effect示例 试试这个:Android 如何获得可绘制波纹按钮的颜色,android,drawable,Android,Drawable,我有各种各样的按钮,我想获取它们的背景色,在彩色可绘制中获取背景色很容易,但在ripple可绘制中却不容易,我如何才能从ripple可绘制中获取背景色。请查看以下安卓中的ripple effect示例 试试这个: RippleDrawable rippleDrawable = (RippleDrawable) button.getBackground(); Drawable.ConstantState state = rippleDrawable.getConstantState(); t
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()
beforetry
和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这样的大数字。如何将此数字转换为颜色?