如何更改Android上SDK-11之前视图的透明度(alpha)?

时间:2012-01-31 22:05:21

标签: android

如何更改Android上SDK-11之前视图的透明度(alpha)?

在建议使用具有某种透明度的背景颜色之前,请注意此方法不包括视图中的所有元素,例如按钮文本或视图组的子视图。

5 个答案:

答案 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?

进行操作