How can I change the transparency (alpha) of a view on pre-SDK-11 on Android?
如何更改Android上SDK-11之前视图的透明度(alpha)?
在建议使用具有某种透明度的背景颜色之前,请注意此方法不包括视图中的所有元素,例如按钮文本或视图组的子视图。
尝试使用AlphaAnimation:http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
/ *必须使用动画才能让卡片褪色。 * /
1 2 3 4 | 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是我使用的,它是一个静态助手类和一个真正的宝石!许多人在这里推荐NineOldAndroids,但我没有看到ViewHelper。它真的很容易使用。
1 2 3 4 | import com.nineoldandroids.view.ViewHelper; ... ViewHelper.setAlpha(myView, .2f); |
您还可以使用它来设置其他属性,如x,y等,在设置动画或构建UI时非常方便。非常感谢Jake Wharton与社区分享他的作品!
编辑 - 以下示例涉及Android pre-SDK11,但我刚刚发现了一个名为Nine Old Androids的非常棒的图书馆,它所做的惊人的事情是为所有API版本启用Android 3.0的所有动画功能!
以前的答案
我想在复杂的布局上动态设置alpha时遇到这种问题。
我创建了一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | @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; } |
您可以根据需要添加其他类型的视图。
你可以扩展视图draw()方法并使用canvas.saveAlphaLayer()
1 2 3 4 5 | public void draw(Canvas canvas) { canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG); super.draw(canvas); canvas.restore(); } |
您可以将Alpha设置为视图的所有颜色(例如按钮文本或视图组的子视图)。将它们变成颜色xml并在所有视图中使用。
您可以递归地从视图中读取颜色并为其添加alpha并将其设置回来。
您可以将视图创建为新活动的主视图。然后像我如何在Android上创建透明活动一样?