Android - кнопка с изображением - затемнение изображения, когда кнопка отключена - PullRequest
3 голосов
/ 26 января 2012

В Android у меня есть кнопка, которая содержит изображение и текст. Когда кнопка отключена, текст автоматически становится серым, но изображение остается прежним. Можно ли затемнить изображение при отключенной кнопке, не имея двух отдельных изображений?

Ответы [ 3 ]

6 голосов
/ 26 января 2012

В вашем коде вы также можете использовать ColorFilter , в частности PorterDuffColorFilter , с режимом DARKEN, например.

Для непрозрачности Drawable вы также можете использовать setAlpha () .

Для получения Drawable s (растровых изображений, ...) в вопросе button.getCompoundDrawables() можно использовать.

Я не уверен, будет ли это работать, но, возможно, вы захотите выяснить, возможно ли настроить битовую карту вашей кнопки через список состояний, который, в свою очередь, относится к двум объектам рисования, один из которых относится к фильтру. Довольно сложно, но если вы не можете / не будете использовать код для этого, возможно, будет целесообразно сделать это в XML таким образом.

2 голосов
/ 27 января 2012

Наконец-то все получилось!

Я не нашел способа сделать это, установив изображение в 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;
}
1 голос
/ 26 января 2012

В приведенном выше сценарии, я думаю, вы можете использовать selector.xml для фона вашей кнопки.Затем вы можете использовать тег <item android:state_enabled="false" android:color="@color/testcolor3" /> соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...