如何更改Android上的SDK-11之前的视图的透明度(alpha)?如何更改Android上的SDK-11上的视图的透明度(alpha)?
在您建议使用具有某种透明度的背景色之前,请注意此方法不包括视图中的所有元素,例如按钮的文本或视图组的子视图。
如何更改Android上的SDK-11之前的视图的透明度(alpha)?如何更改Android上的SDK-11上的视图的透明度(alpha)?
在您建议使用具有某种透明度的背景色之前,请注意此方法不包括视图中的所有元素,例如按钮的文本或视图组的子视图。
编辑 - 下面的例子是指为Android预SDK11,但我只是发现了一个令人惊讶的大图书馆称为Nine Old Androids,它令人惊奇的是使的Android 3.0的所有动画功能对于所有的API版本!
以前的答案
希望能在一个复杂的布局设置动态阿尔法当我真正遇到这样的问题。 我创建了覆盖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;
}
您可以根据需要添加其他种类的视图。
尝试使用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为解决方案..但这不是一个最佳解决方案 – 2012-01-31 22:22:58
@SherifelKhatib为什么这不是一个“最佳”的解决方案,此外,在这种情况下,你怎么定义“最优”,与OP ? – 2013-03-26 09:55:33
哇这是旧的。我想我正在考虑更多涉及用alpha直接绘制的东西。在@纳文的答案附近的东西,我猜也值得+1。 – 2013-03-26 10:06:49
您可以将Alpha设置为视图的所有颜色(例如按钮的文本或视图组的子视图)。使它们成为XML的颜色并在所有视图中使用。
您可以递归地从视图中读取颜色并向它们添加alpha并将其设置回。
您可以创建视图作为新活动的主视图。然后做在How do I create a transparent Activity on Android?
您可以扩展视图draw()方法,并使用canvas.saveAlphaLayer()
public void draw(Canvas canvas) {
canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG);
super.draw(canvas);
canvas.restore();
}
这个解决方案实际上比我的更好,我用它来代替我上面提到的。 – Rotemmiz 2012-02-11 19:21:36
对我来说,只有删除最后一行:'canvas.restore();'才有效。也许这是因为我正在从父视图进行一些子变换。 – 2012-08-22 13:51:13
同上删除最后一行:canvas.restore();否则完美无缺。 – 2013-03-14 17:08:13
的NineOldAndroids视图助手为我所用,这是一个静态辅助类和一个真正的宝石!这里很多人推荐NineOldAndroids,但我没有看到ViewHelper的提及。它非常易于使用。
import com.nineoldandroids.view.ViewHelper;
...
ViewHelper.setAlpha(myView, .2f);
你也可以用它建立时的动画或建立你的UI设置其他属性,如X,Y等,非常方便。非常感谢杰克沃顿与社区分享他的工作!
感谢提及nineoldandroids并提供代码使其工作。 – 2013-07-17 19:53:51
这不适用于2.3.7设备上的ImageView。有什么建议么? – 2013-09-12 20:16:44
我确认,这是在2.3设备上工作。 – jskierbi 2013-10-18 11:32:22
很遗憾你不能使用nineoldandroids方法。如果你做的东西像'ObjectAnimator.ofFloat(myview,“alpha”,0.1f,0.0f).setDuration(10).start();'它只是说“无法找到setter属性alpha myview的值类型为float “。 – Timmmm 2012-11-01 15:59:27
你有没有试过看这个? http://jakewharton.com/advanced-pre-honeycomb-animation/ – 2013-02-12 10:36:31
你的int alpha参数在[0,255]处关闭,但不是[0.0f,1.0f],对不对? – SilentKnight 2015-06-15 10:12:16