2016-04-01 6 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

提案のために...' .getState() 'と' .getColorForState() 'を動作させる方法を理解するのに時間をかけました。 coloursOther [i] = colorStateList.getColorForState(new int [] {statesOther [i]}、0(int []]、[0]、[ ); '、coloursOther []'配列全体と 'rippleColor'は#1f000000を返します。それで、私は 'onClick()'でこのコードを持っているので、クリックされたことに関連する状態しか表示されないだろうと思いました。このコードを 'onCreate()'や 'onWindowFocusChanged()'に入れても、#1f000000しか得られません。 – rockhammer

関連する問題