2012-01-31 50 views

回答

15

編輯 - 下面的例子是指爲Android預SDK11,但我只是發現了一個令人驚訝的大圖書館稱爲Nine Old Androids,它令人驚奇的是使的Android 3.0的所有動畫功能對於所有的API版本!

以前的答案

希望能在一個複雜的佈局設置動態阿爾法當我真正遇到這樣的問題。 我創建了覆蓋onSetAlpha(),並添加了另一個遞歸函數,該函數檢查背景圖像,繪圖和文本顏色的每種視圖。

@Override 
public boolean onSetAlpha(int alpha) 
{ 
    return onSetAlpha(alpha, theLayoutYouWantToSetAlphaTo); 
} 

public boolean onSetAlpha(int alpha, View view) 
{ 
    if (view instanceof ViewGroup) 
    { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) 
     { 
      onSetAlpha(alpha, ((ViewGroup) view).getChildAt(i)); 
      if (((ViewGroup) view).getBackground() != null) ((ViewGroup) view).getBackground().setAlpha(alpha); 
     } 
    } 
    else if (view instanceof ImageView) 
    { 
     if (((ImageView) view).getDrawable() != null) ((ImageView) view).getDrawable().setAlpha(alpha); 
     if (((ImageView) view).getBackground() != null) ((ImageView) view).getBackground().setAlpha(alpha); 
    } 
    else if (view instanceof TextView) 
    { 
     ((TextView) view).setTextColor(((TextView) view).getTextColors().withAlpha(alpha)); 
     if (((TextView) view).getBackground() != null) ((TextView) view).getBackground().setAlpha(alpha); 
    } 
    else if (view instanceof EditText) 
    { 
     ((EditText) view).setTextColor(((EditText) view).getTextColors().withAlpha(alpha)); 
     if (((EditText) view).getBackground() != null) ((EditText) view).getBackground().setAlpha(alpha); 
    } 
    return true; 
} 

您可以根據需要添加其他種類的視圖。

+3

很遺憾你不能使用nineoldandroids方法。如果你做的東西像'ObjectAnimator.ofFloat(myview,「alpha」,0.1f,0.0f).setDuration(10).start();'它只是說「無法找到setter屬性alpha myview的值類型爲float 「。 – Timmmm 2012-11-01 15:59:27

+1

你有沒有試過看這個? http://jakewharton.com/advanced-pre-honeycomb-animation/ – 2013-02-12 10:36:31

+0

你的int alpha參數在[0,255]處關閉,但不是[0.0f,1.0f],對不對? – SilentKnight 2015-06-15 10:12:16

47

嘗試使用AlphaAnimation:http://developer.android.com/reference/android/view/animation/AlphaAnimation.html


/*有爲了得到卡褪色使用動畫。 */

AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F); 
alpha.setDuration(0); // Make animation instant 
alpha.setFillAfter(true); // Tell it to persist after the animation ends 
view.startAnimation(alpha); 
+0

+1爲解決方案..但這不是一個最佳解決方案 – 2012-01-31 22:22:58

+0

@SherifelKhatib爲什麼這不是一個「最佳」的解決方案,此外,在這種情況下,你怎麼定義「最優」,與OP ? – 2013-03-26 09:55:33

+0

哇這是舊的。我想我正在考慮更多涉及用alpha直接繪製的東西。在@納文的答案附近的東西,我猜也值得+1。 – 2013-03-26 10:06:49

0

您可以將Alpha設置爲視圖的所有顏色(例如按鈕的文本或視圖組的子視圖)。使它們成爲XML的顏色並在所有視圖中使用。

您可以遞歸地從視圖中讀取顏色並向它們添加alpha並將其設置回。

您可以創建視圖作爲新活動的主視圖。然後做在How do I create a transparent Activity on Android?

9

您可以擴展視圖draw()方法,並使用canvas.saveAlphaLayer()

public void draw(Canvas canvas) { 
    canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG); 
    super.draw(canvas); 
    canvas.restore(); 
} 
+1

這個解決方案實際上比我的更好,我用它來代替我上面提到的。 – Rotemmiz 2012-02-11 19:21:36

+0

對我來說,只有刪除最後一行:'canvas.restore();'纔有效。也許這是因爲我正在從父視圖進行一些子變換。 – 2012-08-22 13:51:13

+0

同上刪除最後一行:canvas.restore();否則完美無缺。 – 2013-03-14 17:08:13

26

NineOldAndroids視圖助手爲我所用,這是一個靜態輔助類和一個真正的寶石!這裏很多人推薦NineOldAndroids,但我沒有看到ViewHelper的提及。它非常易於使用。

import com.nineoldandroids.view.ViewHelper; 
... 

ViewHelper.setAlpha(myView, .2f); 

你也可以用它建立時的動畫或建立你的UI設置其他屬性,如X,Y等,非常方便。非常感謝傑克沃頓與社區分享他的工作!

+0

感謝提及nineoldandroids並提供代碼使其工作。 – 2013-07-17 19:53:51

+0

這不適用於2.3.7設備上的ImageView。有什麼建議麼? – 2013-09-12 20:16:44

+1

我確認,這是在2.3設備上工作。 – jskierbi 2013-10-18 11:32:22