如何更改Android上SDK-11之前视图的透明度(alpha)?
在建议使用具有某种透明度的背景颜色之前,请注意此方法不包括视图中的所有元素,例如按钮文本或视图组的子视图。
答案 0 :(得分:47)
尝试使用AlphaAnimation:http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
/ *必须使用动画才能让卡片褪色。 * /
AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
view.startAnimation(alpha);
答案 1 :(得分:26)
NineOldAndroids的ViewHelper是我使用的,它是一个静态助手类和一个真正的宝石!许多人在这里推荐NineOldAndroids,但我没有看到ViewHelper。这很容易使用。
import com.nineoldandroids.view.ViewHelper;
...
ViewHelper.setAlpha(myView, .2f);
您还可以使用它来设置其他属性,如x,y等,在设置动画或构建UI时非常方便。非常感谢Jake Wharton与社区分享他的作品!
答案 2 :(得分:15)
编辑 - 下面的示例指的是Android pre-SDK11,但我刚刚发现了一个名为Nine Old Androids的非常棒的图书馆,它所做的惊人的事情是启用所有< / strong>所有API版本的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;
}
您可以根据需要添加其他类型的视图。
答案 3 :(得分:9)
您可以扩展视图draw()方法并使用canvas.saveAlphaLayer()
public void draw(Canvas canvas) {
canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG);
super.draw(canvas);
canvas.restore();
}
答案 4 :(得分:0)
您可以将Alpha设置为视图的所有颜色(例如按钮文本或视图组的子视图)。将它们变成颜色xml并在所有视图中使用。
您可以递归地从视图中读取颜色并为其添加alpha并将其设置回来。
您可以将视图创建为新活动的主视图。然后按照How do I create a transparent Activity on Android?
进行操作