Androidでは、画像とテキストを含むボタンがあります。ボタンを無効にすると、テキストは自動的にグレー表示されますが、イメージはそのまま残ります。 2つの別々の画像を持たずにボタンが無効になっているときに画像を淡色にすることは可能ですか?Android - ボタンが無効のとき画像が暗い画像
答えて
最終的にそれを得ました!
イメージをXMLで設定することでこれを行う方法が見つかりませんでしたので、コードで設定する必要があります。ここで私はそれが動作しているものです:
Button btnObjects = (Button)this.findViewById(R.id.button_objects);
Bitmap bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.button_image_objects);
if(<button needs to be disabled>)
{
btnObjects.setEnabled(false);
bm = adjustOpacity(bm, 128);
}
else
{
btnObjects.setEnabled(true);
}
btnObjects.setCompoundDrawablesWithIntrinsicBounds(null, new BitmapDrawable(bm), null, null);
//and here's where the magic happens
private Bitmap adjustOpacity(Bitmap bitmap, int opacity)
{
//make sure bitmap is mutable (copy of needed)
Bitmap mutableBitmap = bitmap.isMutable()
? bitmap
: bitmap.copy(Bitmap.Config.ARGB_8888, true);
//draw the bitmap into a canvas
Canvas canvas = new Canvas(mutableBitmap);
//create a color with the specified opacity
int colour = (opacity & 0xFF) << 24;
//draw the colour over the bitmap using PorterDuff mode DST_IN
canvas.drawColor(colour, PorterDuff.Mode.DST_IN);
//now return the adjusted bitmap
return mutableBitmap;
}
上記のシナリオでは、ボタンの背景にselector.xmlを使用することができます。それに応じて<item android:state_enabled="false" android:color="@color/testcolor3" />
タグを使用することができます。
これは私を助けにはなりません。ボタンの背景色ではなく、画像の不透明度を調整する必要があります(これは完全に透明です) –
コードでは、ColorFilter、具体的にはPorterDuffColorFilterのモードを使用して、たとえばDARKEN
のモードを使用できます。
Drawable
の不透明度については、setAlpha()も使用できます。
Drawable
(ビットマップなど)を取得するには、button.getCompoundDrawables()
を使用できます。
これがうまくいくかどうかはわかりませんが、状態リストを使ってボタンのビットマップを構成することができるかどうかを調べたいと思うかもしれません。かなり複雑ですが、もしあなたがコードを使用できないのであれば、それをXMLでこのように行うことは可能かもしれません。
おそらく正しい方法ですが、ボタンからビットマップを取得してボタンに戻すにはどうすればいいですか? –
通常、 '((Drawable)button.findViewById(myImageId)).setAlpha(...)'のようなものを介していますが、ボタンの作り方はわかりません。カスタマイズされた「普通の」ボタン、 'ImageButton'、ある種の' CompoundButton'ですか? – JimmyB
これは通常のボタンです。イメージはXMLで 'android:topDrawable'と指定されています –
これは多くの助けとなりました。ありがとう! –