setAlpha适用于具有相同资源ID的所有Drawable,如何才能应用于某些?

时间:2014-02-10 09:33:36

标签: android

背景

我创建了以下布局:

enter image description here

我正在尝试将setAlpha应用于Drawable,后者用作ImageButton的背景。我只想将它应用于按钮的子集,因此它显示如下:

enter image description here

但是,它无法正常工作。 setAlpha不仅仅是一些按钮,而是应用于按钮的所有,例如:

enter image description here

因为每个ImageButton使用相同的图像,所以每个底层drawable都具有相同的资源ID。对我来说,创建每个图像的不同实例以使它们具有不同的资源ID是非常不切实际的。

基本上,我在代码中所做的是:

    private Drawable GetBlockImage(BlockStatus block)
    {
        Drawable imgBlock = null;

        try
        {
            if (block.inAlarm)
            {
                imgBlock = _resources.GetDrawable(Resource.Drawable.Block_Alarmed_6);

            }
            else
            {
                var resId = 0;
                switch (block.armState)
                {
                    case BlockStatus.BlockArming.Unset:
                        // *
                        // In the images above, this is the resource ID that is set
                        * //
                        resId = Resource.Drawable.Block_Unset_6;
                        break;
                    case BlockStatus.BlockArming.PartsetA:
                        resId = Resource.Drawable.Block_Armed_6_PartsetA;
                        break;
                    case BlockStatus.BlockArming.PartsetB:
                        resId = Resource.Drawable.Block_Armed_6_PartsetB;
                        break;
                    case BlockStatus.BlockArming.Fullset:
                        resId = Resource.Drawable.Block_Alarmed_6;
                        break;
                }

                imgBlock = _resources.GetDrawable(resId);
            }
        }
        catch (Exception ex)
        {
            ErrorHandler.Handle(_context, ex);
        }

        if (!block.userAllowed)
        {
            imgBlock.SetAlpha(50);
        }

        return imgBlock;
    }

问题:

如何将setAlpha仅应用于布局中的ImageButtons的子集?每个ImageButton使用相同的资源ID。

2 个答案:

答案 0 :(得分:2)

不要将alpha设置为 drawable ,而是设置为 ImageButtons

您只需执行以下操作即可:

yourImageButton.setAlpha(50);

答案 1 :(得分:0)

在设置alpha之前使用d.mutate();,这会导致drawables不再共享其状态...

d.mutate();
d.setAlpha(100);