setAlpha和setImageAlpha的区别

ImageView有两个方法相关的方法: setAlpha和setImageAlpha 。 前者从API级别1开始可用,但从16级开始被弃用。后者从16级开始可用。另外还有另一个setAlpha方法,来自View类,这是在API级别11中引入的。

ImageView#setAlpha和ImageView#setImageAlpha之间的区别仅在命名方面? 有没有行为差异? View#setAlpha和ImageView#setAlpha之间有什么关系?

Solutions Collecting From Web of "setAlpha和setImageAlpha的区别"

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

View.setAlpha(float)是所有View上可用的一般方法,包括ImageView 。 它将指定的不透明度应用于整个视图。 为了达到这个目的,默认情况下,系统创build一个临时缓冲区(一个硬件层),在这个缓冲区中,像往常一样绘制视图,然后用指定的alpha值在屏幕上绘制缓冲区。 这是一个需要初始分配缓冲区的双向机制,因此速度稍慢。 有关更多信息,请参阅此video以及如何更改默认行为: 透明度的隐藏成本 。 需要注意的是, ImageView默认包含了一个优化,如果它没有背景,将会避免这个缓冲区分配,所以实际上,如果ImageView没有背景,调用ImageView.setAlpha(float)将不会有性能损失。

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

  • View.setAlpha(float)接受一个float作为input,并且期望值在0..1(含)范围内。
  • ImageView.setAlpha(int)接受一个int作为input,并期望一个范围在0..255(含)的值。 ImageView.setAlpha(int)已被弃用。 这可能是因为他们想要删除底层的View.setAlpha(float)
  • 正如其他响应者指出ImageView.setImageAlpha(int)只是简单地调用到不赞成的ImageView.setAlpha(int) 。 您应该期望ImageView.setAlpha(int)将在未来的API更新中被删除,因此应该避免使用它。

是的,这只是一个命名的区别 – 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); } 

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

使用setAlpha可以设置整个容器的不透明度,因此需要使用该方法。 与setImageAlpha你可以设置只有图像的alpha,而不是整个容器。

除此之外,我不能真正想到他们有一个alpha方法的原因。