2011-04-26 78 views

回答

5

使用AlphaAnimation將是最過渡的最佳解決方案,以達到合理的效果,肯定會爲我工作,如果我不能」 t找到一種方法來完成我正在嘗試做的事情,這涉及到基於設備的傾斜角度以漸變的方式在兩個視圖之間淡入淡出。幸運的是我有!這是我採取的策略:我將視圖包裝在FrameLayout的自定義子類中,並在onDraw上實現。在那裏,我將子視圖捕獲爲位圖,然後用預期的alpha值重新繪製位圖。這裏有一些代碼。我會編輯,當我得到清理,這是概念恰恰證明,但它就像一個魅力:

public class AlphaView extends FrameLayout { 
    private int alpha = 255; 

    public AlphaView(Context context) { 
     super(context); 
     setWillNotDraw(false); 
    } 

    public AlphaView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setWillNotDraw(false); 
    } 

    public AlphaView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setWillNotDraw(false); 
    } 

    public void setCustomAlpha(int alpha) { 
     if (this.alpha != alpha) { 
      this.alpha = alpha; 
      invalidate(); 
     } 
    } 

    public int getCustomAlpha() { 
     return alpha; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     for(int index = 0; index < getChildCount(); index++) { 
      View child = getChildAt(index); 
      child.setVisibility(View.INVISIBLE); 
      child.setDrawingCacheEnabled(true); 
      Bitmap bitmap = child.getDrawingCache(true); 
      bitmap = Bitmap.createBitmap(bitmap); 
      child.setDrawingCacheEnabled(false); 
      Paint paint = new Paint(); 
      paint.setAlpha(alpha); 
      canvas.drawBitmap(bitmap, 0, 0, paint); 
     } 
    } 
} 
+1

任何性能問題? – Quentamia 2012-04-09 15:40:55

+0

我沒注意到。你的結果可能有所不同 – 2012-04-10 19:50:11

+0

該解決方案降低了性能。 – 2013-04-15 16:06:10

3

這取決於視圖類型。

對於一個TextView,在XML你可以有以下屬性:

android:background="#00000000" 
android:textColor="#77FFFFFF" 

前兩個數字是Alpha值從00到FF(十六進制)。 背景是完全透明的,而文字是白色的,部分透明。我沒有測試過這個,但它應該工作。

如果你有一個背景是圖像,那麼最簡單的事情就是用透明度預先創建你的png drawable。

+0

我有幾個是不同種類的意見(一些自定義繪製),所有共同生活在一個單個RelativeLayout。我希望能夠在RelativeLayout上設置alpha,而不是混淆所有衆多的孩子。 – 2011-04-26 16:11:26

+0

我不認爲這可能與API級別7 ...但如果任何人知道更好,他們將不得不共享一個解決方案... – Maximus 2011-04-26 16:12:25

+1

任何事情都是可能的。 ;) – 2011-04-26 16:15:45

13

您應該能夠使用AlphaAnimation在API級別7

View v = findViewById(R.id.view2); 

    AlphaAnimation aa = new AlphaAnimation(0f,1f); 
    aa.setDuration(5000); 
    v.startAnimation(aa); 
+1

啊射...我不使用動畫太多。這絕對是一種方式。我虛心添加我的最高票數。 – Maximus 2011-04-26 17:00:16

+0

@Maximus @slund檢查一下!我想通了如何做alpha。 – 2011-04-26 18:50:08

+0

要添加到:使用神話般的NineOldAndroids庫它也可以在兩行代碼中工作。 – 2013-03-26 08:11:20

相關問題