背景
我创建了以下布局:
我正在尝试将setAlpha应用于Drawable,后者用作ImageButton的背景。我只想将它应用于按钮的子集,因此它显示如下:
但是,它无法正常工作。 setAlpha不仅仅是一些按钮,而是应用于按钮的所有,例如:
因为每个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。
答案 0 :(得分:2)
不要将alpha设置为 drawable ,而是设置为 ImageButtons 。
您只需执行以下操作即可:
yourImageButton.setAlpha(50);
答案 1 :(得分:0)
在设置alpha之前使用d.mutate();
,这会导致drawables不再共享其状态...
d.mutate();
d.setAlpha(100);