2016-11-12 17 views
0

ボタンをクリックして背景色を取得したい場合。"blue_color"という名前のリソースで背景色が同じ場合、make background transparent.Elseにすると"blue_color"になります。私はhereの方法を試したが、それは私にエラーを与える。ボタンの背景色を取得しようとしているときにjava.lang.ClassCastExceptionが発生しました

コード:logcatから

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
       ColorDrawable btc = (ColorDrawable) btn.getBackground(); 
       int colorId = btc.getColor(); 
       if(colorId == R.color.blue_color){ 
       btn.setBackgroundColor(Color.TRANSPARENT); 
       }else{ 
       btn.setBackgroundColor(getResources().getColor(R.color.blue_color)); 
       } 
      } 
    }); 

エラー:

致命的な例外:メイン とjava.lang.ClassCastException:android.graphics.drawable.InsetDrawableはandroid.graphics.drawableにキャストすることはできません.ColorDrawable

行は、

ColorDrawable btc =(ColorDrawable)btn.getBackground();

+0

'R.color.blue_color'は色ではないので、色は' R.color.blue_color'になりません。カラーリソースの識別子です。私はあなたのボタンの状態を追跡するために、別の 'boolean'や他のフィールドを使うことをお勧めします。 – CommonsWare

答えて

0

あなたが描画可能になっているあなたのコードではbtn.getBackground().getColor();

を使用する必要があります... ので、行は次のようになります。

ColorDrawable btc = (ColorDrawable) btn.getBackground().getColor(); 

編集:あなたがのint型のIDを取得することができますこのようなリソースの色:

int alpha = ... // 0-255 
int blueColor = ResourcesCompat.getColor(getResources(), R.color.blue_color, null); 
int blueColorWithAlpha = Color.argb( 
alpha, 
Color.red(blueColor), Color.green(blueColor), Color.blue(blueColor)); 

Th色のIDは今ではblueColorWithAlphaです。ボタンの色IDを取得するには、ボタンの色IDを取得するには、次のようにします。int color = ((ColorDrawable)button.getBackground()).getColor();

このコードはテストしていませんが、これらのスニペットをstackoverflowで見つけました...

+0

ColorDrawableを使用できませんbtc =(ColorDrawable)btn.getBackground()。getColor(); 「メソッド 'getColor」を解決できません。 –

+0

これを試してください:Drawable background = btn..getBackground(); if(background instanceof ColorDrawable){Color color =((ColorDrawable)background).getColor(); } – Asama

+0

必須android.graphics.Color、Colorで見つかったint color =((ColorDrawable)background).getColor(); –