2010-08-03 65 views

回答

0

有沒有簡單的方法來做到這一點。這是因爲ImageView可能已設置爲BitmapStateListDrawableColorDrawable或其他完全不同。這些類中只有一個具有單一顏色;在任何其他可繪製的alpha中,每個像素的像素可能不同(像素是ARGB格式,每個像素爲alpha,紅色,綠色和藍色)。我很確定setAlpha()方法只適用於支持它的drawable,正如上面的Sephy所述。

你究竟需要了解圖像的透明度?如果您知道ImageView會提前填充什麼,那麼也許您可以事先提取Alpha。如果您無法直接訪問alpha,但您可以確定顏色,那麼Alpha將等於color >>> 24

+0

我使用AlphaAnimation爲某些ImageView設置動畫,並且我想檢查它們的alpha是否爲1,以確定是否應該在其上運行我的淡入淡出動畫。 – Joren 2010-08-04 08:40:07

+0

這只是爲了解哪些視圖已經生成動畫,哪些視圖不是哪一個?你應該想出一些其他的方法來解決這個問題,例如,如果'imgView.getAnimation()!= fadeIn',那麼你認爲動畫還沒有被應用。或者,您可以繼承'ImageView'並覆蓋'onSetAlpha()'方法;這是由於動畫導致alpha變化時將被調用的方法。 – 2010-08-04 13:27:00

0

實際上,您需要使用getOpacity(),因爲只有ColorDrawable,Transformation和其他幾個人才能獲得alpha存在。你需要使用它的可繪製的ImageView而不是視圖本身。

+0

很酷,謝謝你的提示。 – Joren 2010-08-03 22:51:49

+0

嗯。如果我在運行時通過XML而不是通過setImageResource設置ImageView src,getDrawable()爲null。有任何想法嗎? – Joren 2010-08-04 00:45:04

+0

Woops,我是設置背景而不是src。 getOpacity雖然沒有做任何有用的事,但它只返回4個常量中的一個,我需要返回實際透明度值的東西。 – Joren 2010-08-04 01:08:52

1

如果任何人只需要獲取和設置控件的知名度,getVisibility和setVisibility可能是一種替代,你可以使用:

if(vw.getVisibility() == View.VISIBLE) 
{ 
    // do something 
} 

,你可以設置可見性:

vw.setVisibility(View.INVISIBLE); 
1

這裏亞去View.ALPHA.get(View)

你可以在if語句中使用它來獲得布爾值並檢查視圖的當前alpha狀態。

0

你不能直接。如果您以編程方式設置alpha,則可以解決該問題,並在設置時保留Alpha值。例如:

private int mCurrentAlpha; 

private void setAlpha(int newAlpha){ 
    mCurrentAlpha=newAlpha; 
    ImageView imageView=... 
    imageView.setAlpha(mCurrentAlpha); 
}