我如何在安卓SDK 11之前更改视图的透明度(alpha)?
在您建议使用具有一些透明度的背景颜色之前,请注意此方法不包括视图中的所有元素,例如按钮文本或视图组的子视图。
我如何在安卓SDK 11之前更改视图的透明度(alpha)?
在您建议使用具有一些透明度的背景颜色之前,请注意此方法不包括视图中的所有元素,例如按钮文本或视图组的子视图。
我使用的是NineOldAndroids的ViewHelper,它是一个静态辅助类,真的很棒!这里有很多人推荐NineOldAndroids,但我没有看到提到ViewHelper。它非常容易使用。
import com.nineoldandroids.view.ViewHelper;
...
ViewHelper.setAlpha(myView, .2f);
您还可以使用它来设置其他属性,如x、y等,在设置动画或构建UI时非常方便。非常感谢Jake Wharton与社区分享他的工作!
编辑 - 下面的示例适用于Android SDK11之前,但我刚刚发现了一个非常棒的库,名为Nine Old Androids。它的神奇之处在于可以使得所有API版本的Android都能够使用Android 3.0的所有动画功能!!!
以前的回答
当我想要在复杂的布局上动态设置alpha时,我遇到了这种问题。
我创建了onSetAlpha()
的重写,并添加了另一个递归函数,检查每种类型的视图的背景图像、可绘制对象和文本颜色。
@Override
public boolean onSetAlpha(int alpha)
{
return onSetAlpha(alpha, theLayoutYouWantToSetAlphaTo);
}
public boolean onSetAlpha(int alpha, View view)
{
if (view instanceof ViewGroup)
{
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
{
onSetAlpha(alpha, ((ViewGroup) view).getChildAt(i));
if (((ViewGroup) view).getBackground() != null) ((ViewGroup) view).getBackground().setAlpha(alpha);
}
}
else if (view instanceof ImageView)
{
if (((ImageView) view).getDrawable() != null) ((ImageView) view).getDrawable().setAlpha(alpha);
if (((ImageView) view).getBackground() != null) ((ImageView) view).getBackground().setAlpha(alpha);
}
else if (view instanceof TextView)
{
((TextView) view).setTextColor(((TextView) view).getTextColors().withAlpha(alpha));
if (((TextView) view).getBackground() != null) ((TextView) view).getBackground().setAlpha(alpha);
}
else if (view instanceof EditText)
{
((EditText) view).setTextColor(((EditText) view).getTextColors().withAlpha(alpha));
if (((EditText) view).getBackground() != null) ((EditText) view).getBackground().setAlpha(alpha);
}
return true;
}
您可以根据需要添加其他类型的视图。
ObjectAnimator.ofFloat(myview, "alpha", 0.1f, 0.0f).setDuration(10).start();
,它只会显示“无法找到 myview 的 float 类型的 alpha 属性的 setter 方法”。 - Timmmmint alpha
的范围是闭区间 [0, 255],而不是 [0.0f, 1.0f],对吗? - SilentKnight您可以扩展视图的draw()方法,并使用canvas.saveAlphaLayer()
public void draw(Canvas canvas) {
canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG);
super.draw(canvas);
canvas.restore();
}
canvas.restore();
后才能正常工作。也许是因为我正在从父视图进行一些子变换。 - olivier_sdg您可以将Alpha设置为视图的所有颜色(例如按钮的文本或视图组的子视图)。将它们制作成颜色xml并在所有视图中使用。
您可以递归地从视图中读取颜色,添加Alpha并将其设置回去。
您可以将该视图创建为新活动的主视图。然后按照如何在Android上创建透明活动?中的步骤进行操作。