ImageView有兩種方法相關的方法:setAlpha和setImageAlpha。前者是因爲API等級1可用,但由於16級已被棄用,後者可從16級還有另一種方法setAlpha從View類,這在API層面推出11setAlpha和setImageAlpha之間的區別
的區別在ImageView#setAlpha和ImageView#setImageAlpha之間只有在命名中?有沒有行爲差異? View#setAlpha和ImageView#setAlpha之間有什麼關係?
ImageView有兩種方法相關的方法:setAlpha和setImageAlpha。前者是因爲API等級1可用,但由於16級已被棄用,後者可從16級還有另一種方法setAlpha從View類,這在API層面推出11setAlpha和setImageAlpha之間的區別
的區別在ImageView#setAlpha和ImageView#setImageAlpha之間只有在命名中?有沒有行爲差異? View#setAlpha和ImageView#setAlpha之間有什麼關係?
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背景,你也想要半透明,這種方法不會產生預期的效果。
我相信只有命名是不同的。因爲setImageAlpha()
比setAlpha()
更具體。對於View#setAlpha
和ImageView#setAlpha/setImageAlpha
不存在直接關係。View
類具有setAlpha,因爲它可以作爲View#ImageView
的父級,所以它的功能類似於容器。
隨着setAlpha
你可以設置整個容器的不透明度,因此它需要該方法。與setImageAlpha
你可以設置只有圖像的alpha,而不是整個容器。
除此之外,我不能真正想到他們有一個alpha方法的原因。
肯定的,它僅僅是一個命名差異 - 在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);
}
這是真的,但是setAlpha()有一個@Deprecated註解,所以它最有可能是setImageAlpha()的實現將在未來發生變化 –
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更新中被刪除,因此應該避免使用它。這個答案是不明確的。 'ImageView.setAlpha(int)'僅僅因爲它的名字而被棄用,並且它已經被重命名爲'ImageView.setImageAlpha(int)'。當您需要在ImageView上應用Alpha濾鏡時,最好使用'setImageAlpha(int)'或者不贊成使用的'setAlpha(int)',因爲它們直接將alpha值應用於底層的'Paint',它在畫布,而setAlpha(float)在繪製視圖的位置創建一個臨時緩衝區,然後緩衝區與指定alpha值的屏幕其餘部分混合。 – BladeCoder
Chet Haase澄清了@BladeCoder在[Google I/O 2013 - Android圖形性能視頻](https://www.youtube.com/watch?v=vQZFaec9NpA#t=32m59s)中指出的內容 – azizbekian
這是最全面的準確的答案。不明白爲什麼它的評價最低。這應該是被接受的答案。 –
值得注意的是,當資源是自適應圖標時,當前setImageAlpha()無法正常工作。在這種情況下,請改用View.setAlpha()。 https://issuetracker.google.com/issues/72694861 –