2016-04-01 34 views
0

我有各种各样的按钮,我想要获得它们的背景颜色,获取可绘制颜色的背景颜色很容易,但它不容易绘制波纹,我该如何管理从波纹可绘制的背景颜色。如何获得可绘制波纹按钮的颜色

回答

2

试试这个:

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(); 
    } 
+0

对于默认的按钮背景颜色,它看起来接近#ffd6d7d7,代码返回#1f000000。我怎样才能选择正确的状态,即点击按钮之前的状态? thx – rockhammer

+0

@rockhammer你可以尝试'ColorStateList.getColorForState' – shhp

+0

thx的建议...花了我一段时间来弄清楚如何工作'.getState()'&'.getColorForState()'。在'try'之前插入'int [] statesOther = rippleDrawable.getState();'在'try'之前插入一个for循环来执行'coloursOther [i] = colorStateList.getColorForState(new int [] {statesOther [i]},0 );',整个'coloursOther []'数组和'rippleColor'返回#1f000000。然后我想可能是因为我在'onClick()'中有这个代码,所以它只会显示与点击相关的状态。即使当我把这个代码放在'onCreate()'或'onWindowFocusChanged()',我只得到#1f000000 – rockhammer

相关问题