2014-02-17 48 views

回答

37

ImageView.setAlpha(int)已更名爲ImageView.setImageAlpha(int)避免與API級別11

View.setAlpha(float)推出了新的方法View.setAlpha(float)混亂是所有View S,其中包括ImageView提供的一般方法。它將指定的不透明度應用於整個視圖。爲了達到這個目的,默認情況下,系統創建一個臨時緩衝區(硬件層),其中視圖按照慣例繪製,然後使用指定的alpha值在屏幕上繪製緩衝區。這是一個需要初始分配緩衝區的雙通道機制,因此速度稍慢。有關更多信息以及如何更改默認行爲,請參閱此視頻:Hidden Cost of Transparency。 重要的是要注意,ImageView默認包含一個優化,如果它沒有背景,將避免緩衝區分配,所以在實踐中,如果ImageView沒有背景,則調用ImageView.setAlpha(float)時不會有性能損失。

ImageView.setImageAlpha(int)(和ImageView.setAlpha(int))是適用於ImageView的方法。它們控制用於直接在屏幕上繪製內容圖像(位圖或其他)的alpha值,無需中間傳遞,因此這是用於對由ImageView顯示的圖像應用透明度的首選方法。當然,如果你在你的ImageView上設置一個Drawable背景,你也想要半透明,這種方法不會產生預期的效果。

+1

這是最全面的準確的答案。不明白爲什麼它的評價最低。這應該是被接受的答案。 –

+0

值得注意的是,當資源是自適應圖標時,當前setImageAlpha()無法正常工作。在這種情況下,請改用View.setAlpha()。 https://issuetracker.google.com/issues/72694861 –

1

我相信只有命名是不同的。因爲setImageAlpha()setAlpha()更具體。對於View#setAlphaImageView#setAlpha/setImageAlpha不存在直接關係。View類具有setAlpha,因爲它可以作爲View#ImageView的父級,所以它的功能類似於容器。

隨着setAlpha你可以設置整個容器的不透明度,因此它需要該方法。與setImageAlpha你可以設置只有圖像的alpha,而不是整個容器。

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

+1

你碰到了'setAlpha()'和'setImageAlpha()'之間的關鍵區別用setAlpha你可以設置整個容器的不透明度,因此它需要該方法。與setImageAlpha你可以設置只有圖像的alpha,而不是整個容器。 – CrimsonX

+0

@CrimsonX:查看源代碼(例如,在cania的答案中),看起來你描述的行爲不同實際上並不存在。這兩種方法做同樣的事情。所以看起來這個答案和評論是不正確的。 – LarsH

4

肯定的,它僅僅是一個命名差異 - 在Android源當前實現在API級16是:

/** 
* 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); 
} 
+1

這是真的,但是setAlpha()有一個@Deprecated註解,所以它最有可能是setImageAlpha()的實現將在未來發生變化 –

27
  • View.setAlpha(float)接受浮點值作爲輸入,並預期取值範圍爲0的值。 .1包括在內。
  • ImageView.setAlpha(int)接受一個int作爲輸入,並期望值在0..255(含)範圍內。 ImageView.setAlpha(int)已棄用。這可能是因爲他們想要消除與底層的衝突View.setAlpha(float)
  • 正如其他響應者指出ImageView.setImageAlpha(int)只是調用已過時的ImageView.setAlpha(int)。你應該預計ImageView.setAlpha(int)將在未來的API更新中被刪除,因此應該避免使用它。
+10

這個答案是不明確的。 'ImageView.setAlpha(int)'僅僅因爲它的名字而被棄用,並且它已經被重命名爲'ImageView.setImageAlpha(int)'。當您需要在ImageView上應用Alpha濾鏡時,最好使用'setImageAlpha(int)'或者不贊成使用的'setAlpha(int)',因爲它們直接將alpha值應用於底層的'Paint',它在畫布,而setAlpha(float)在繪製視圖的位置創建一個臨時緩衝區,然後緩衝區與指定alpha值的屏幕其餘部分混合。 – BladeCoder

+0

Chet Haase澄清了@BladeCoder在[Google I/O 2013 - Android圖形性能視頻](https://www.youtube.com/watch?v=vQZFaec9NpA#t=32m59s)中指出的內容 – azizbekian