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

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

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

编辑 – 下面的例子是指Android SDK之前的版本,但是我刚刚发现了一个叫做Nine Old Android的令人惊奇的库,它所做的惊人的事情是为所有API版本启用Android 3.0的所有animationfunction!

以前的答案

当我想在一个复杂的布局上dynamic设置alpha时,实际上遇到了这样的问题。 我创build了一个覆盖onSetAlpha()并添加了另一个recursion函数,检查每种视图的背景图像,可绘制和文本颜色。

  @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; } 

您可以根据需要添加其他types的视图。

尝试使用AlphaAnimation: http : //developer.android.com/reference/android/view/animation/AlphaAnimation.html


/ *必须使用animation才能使卡片变淡。 * /

 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); 

NineOldAndroids的ViewHelper是我使用的,它是一个静态的助手类和真正的gem! 这里推荐NineOldAndroids,但是我没有看到ViewHelper的提及。 这真的很容易使用。

 import com.nineoldandroids.view.ViewHelper; ... ViewHelper.setAlpha(myView, .2f); 

您也可以使用它来设置其他属性,如X,Y等,非常方便设置animation或build立您的用户界面。 非常感谢杰克·沃顿与社区分享他的工作!

您可以扩展视图的draw()方法并使用canvas.saveAlphaLayer()

 public void draw(Canvas canvas) { canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG); super.draw(canvas); canvas.restore(); } 

您可以将Alpha设置为视图的所有颜色(例如button的文本或视图组的子视图)。 使它们成为XML的颜色,并在所有视图中使用。

您可以recursion地从视图中读取颜色,并向它们添加alpha并将其设置回来。

您可以将该视图创build为新活动的主视图。 然后做如何在Android上创build一个透明的活动?