Android - 带图像的按钮 - 禁用按钮时的暗淡图像

时间:2012-01-26 16:27:11

标签: android image button

在Android中,我有一个包含图像和文本的按钮。禁用该按钮时,文本将自动显示为灰色,但图像保持不变。如果禁用按钮而没有两个单独的图像,是否可以使图像变暗?

3 个答案:

答案 0 :(得分:6)

在您的代码中,您还可以使用ColorFilter,特别是PorterDuffColorFilter,其模式为DARKEN

对于Drawable的不透明度,您还可以使用setAlpha()

要获得问题button.getCompoundDrawables()中的Drawable s(位图,...),可以使用。

我不确定这是否可行,但也许您想调查是否可以通过状态列表配置按钮的位图,而状态列表又指两个可绘制的,其中一个引用过滤器。非常复杂,但是如果您不能/不会使用代码,那么以这种方式使用XML可能是可行的。

答案 1 :(得分:2)

终于搞定了!

我还没有找到通过在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;
}

答案 2 :(得分:1)

在上面的场景中,我猜你可以使用selector.xml作为按钮的背景。然后,您可以使用<item android:state_enabled="false" android:color="@color/testcolor3" />   相应地标记。