如何更改Android上的SDK-11之前的視圖的透明度(alpha)?如何更改Android上的SDK-11上的視圖的透明度(alpha)?
在您建議使用具有某種透明度的背景色之前,請注意此方法不包括視圖中的所有元素,例如按鈕的文本或視圖組的子視圖。
如何更改Android上的SDK-11之前的視圖的透明度(alpha)?如何更改Android上的SDK-11上的視圖的透明度(alpha)?
在您建議使用具有某種透明度的背景色之前,請注意此方法不包括視圖中的所有元素,例如按鈕的文本或視圖組的子視圖。
編輯 - 下面的例子是指爲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;
}
您可以根據需要添加其他種類的視圖。
嘗試使用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);
+1爲解決方案..但這不是一個最佳解決方案 – 2012-01-31 22:22:58
@SherifelKhatib爲什麼這不是一個「最佳」的解決方案,此外,在這種情況下,你怎麼定義「最優」,與OP ? – 2013-03-26 09:55:33
哇這是舊的。我想我正在考慮更多涉及用alpha直接繪製的東西。在@納文的答案附近的東西,我猜也值得+1。 – 2013-03-26 10:06:49
您可以將Alpha設置爲視圖的所有顏色(例如按鈕的文本或視圖組的子視圖)。使它們成爲XML的顏色並在所有視圖中使用。
您可以遞歸地從視圖中讀取顏色並向它們添加alpha並將其設置回。
您可以創建視圖作爲新活動的主視圖。然後做在How do I create a transparent Activity on Android?
您可以擴展視圖draw()方法,並使用canvas.saveAlphaLayer()
public void draw(Canvas canvas) {
canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG);
super.draw(canvas);
canvas.restore();
}
這個解決方案實際上比我的更好,我用它來代替我上面提到的。 – Rotemmiz 2012-02-11 19:21:36
對我來說,只有刪除最後一行:'canvas.restore();'纔有效。也許這是因爲我正在從父視圖進行一些子變換。 – 2012-08-22 13:51:13
同上刪除最後一行:canvas.restore();否則完美無缺。 – 2013-03-14 17:08:13
的NineOldAndroids視圖助手爲我所用,這是一個靜態輔助類和一個真正的寶石!這裏很多人推薦NineOldAndroids,但我沒有看到ViewHelper的提及。它非常易於使用。
import com.nineoldandroids.view.ViewHelper;
...
ViewHelper.setAlpha(myView, .2f);
你也可以用它建立時的動畫或建立你的UI設置其他屬性,如X,Y等,非常方便。非常感謝傑克沃頓與社區分享他的工作!
感謝提及nineoldandroids並提供代碼使其工作。 – 2013-07-17 19:53:51
這不適用於2.3.7設備上的ImageView。有什麼建議麼? – 2013-09-12 20:16:44
我確認,這是在2.3設備上工作。 – jskierbi 2013-10-18 11:32:22
很遺憾你不能使用nineoldandroids方法。如果你做的東西像'ObjectAnimator.ofFloat(myview,「alpha」,0.1f,0.0f).setDuration(10).start();'它只是說「無法找到setter屬性alpha myview的值類型爲float 「。 – Timmmm 2012-11-01 15:59:27
你有沒有試過看這個? http://jakewharton.com/advanced-pre-honeycomb-animation/ – 2013-02-12 10:36:31
你的int alpha參數在[0,255]處關閉,但不是[0.0f,1.0f],對不對? – SilentKnight 2015-06-15 10:12:16