setAlpha和setImageAlpha之间的区别

时间:2014-02-17 14:35:08

标签: android android-imageview android-view

ImageView有两种与方法相关的方法:setAlphasetImageAlpha。前者自API级别1起可用,但自16级以来已弃用。后者自16级起可用。还有另一个setAlpha方法,来自View类,这是在API级别11中引入的

ImageView#setAlpha和ImageView#setImageAlpha之间的区别仅在于命名吗?有任何行为差异吗? View#setAlpha和ImageView#setAlpha之间的关系是什么?

4 个答案:

答案 0 :(得分:47)

ImageView.setAlpha(int)已重命名为ImageView.setImageAlpha(int),以避免与API级别11中引入的新方法View.setAlpha(float)混淆。

View.setAlpha(float)是所有View上可用的常规方法,包括ImageView。它将指定的不透明度应用于整个视图。为实现此目的,默认情况下,系统会像往常一样创建一个临时缓冲区(硬件层),然后在屏幕上绘制具有指定alpha值的缓冲区。这是一个双通机制,需要初始分配一个缓冲区,所以它有点慢。有关更多信息以及如何更改默认行为,请参阅此视频:Hidden Cost of Transparency。 重要的是要注意ImageView默认情况下包含一个优化,如果它没有背景,它将避免这种缓冲区分配,因此在实践中,如果ImageView.setAlpha(float)调用ImageView,则不会有性能损失没有背景。

ImageView.setImageAlpha(int)(和ImageView.setAlpha(int))是适用于ImageView的方法。它们控制用于直接在屏幕上绘制内容图像(位图或其他)的alpha值,没有中间传递,因此这是用于将透明度应用于ImageView显示的图像的首选方法。当然,如果你在ImageView上设置了一个你想要半透明的背景Drawable,这个方法将不会产生预期的结果。

答案 1 :(得分:27)

  • View.setAlpha(float)接受一个浮动作为输入,并期望一个0..1范围内的值。
  • ImageView.setAlpha(int)接受一个int作为输入,并期望一个0..255范围内的值。不推荐使用ImageView.setAlpha(int)。这可能是因为他们想要删除与基础View.setAlpha(float)
  • 的冲突
  • 正如其他响应者指出ImageView.setImageAlpha(int)只是调用已弃用的ImageView.setAlpha(int)。您应该期望在将来的API更新中删除ImageView.setAlpha(int),因此应避免使用它。

答案 2 :(得分:4)

是的,它只是一个命名差异 - API级别16的Android源代码中的当前实现是:

/**
 * Sets the alpha value that should be applied to the image.
 *
 * @param alpha the alpha value that should be applied to the image
 *
 * @see #getImageAlpha()
 */
@RemotableViewMethod
public void setImageAlpha(int alpha) {
    setAlpha(alpha);
}

答案 3 :(得分:1)

我认为只有命名是有区别的。因为setImageAlpha()setAlpha()更具体。对于View#setAlphaImageView#setAlpha/setImageAlpha,没有直接的关系。View类有一个setAlpha,因为它可以作为View#ImageView的父级,所以它的功能就像一个容器。

使用setAlpha可以设置整个容器的不透明度,它需要该方法。使用setImageAlpha,您只能设置图像的alpha而不是整个容器。

除此之外,我无法想到他们同时使用alpha方法的原因。