2011-10-14 28 views
21

我有一個UI,其中根佈局是一個RelativeLayout。它有許多視圖,如字段,按鈕等。Android的setDrawingCacheEnabled()如何工作?

還有兩個其他面板最初是不可見的。當用戶點擊一個按鈕時,其中一個面板從左側滑入,另一個從底部滑入。問題是Nexus S的幀速率是可憐的。我想使用setDrawingCacheEnabled(true)爲了(我希望)加快這兩個面板的動畫速度。作爲一個簡單的例子,這裏大概是我在這些面板中的一個上滑動的方式。我將它稱爲「detailPanel」。

public class MyActivity extends Activity { 
    // Initially invisible. 
    private View detailPanel; 

    // A simple slide animation. 
    private Animation detailEnterAnimation; 

    ... 

    public void someButtonClicked(View view) { 
    detailPanel.startAnimation(detailEnterAnimation); 
    detailPanel.setVisibility(View.VISIBLE); 
    detailPanel.setDrawingCacheEnabled(true); 
    } 
} 

現在在DetailPanel中,我嘗試使用緩存。我希望通過緩存位圖呈現會提高性能:

public class DetailPanel extends LinearLayout { 
    public void draw(Canvas canvas) { 
    Bitmap cache = getDrawingCache(); 
    if (cache != null) { 
     canvas.drawBitmap(cache, 0, 0, null); 
    } else { 
     super.draw(canvas); 
    } 
    } 
} 

位圖非空並且是正確的大小,但它是全黑的。

爲什麼我的位圖是黑色的?該代碼可能是淫穢的錯誤;我已經嘗試了一百萬種不同的東西,只是無法弄清楚。

+0

您是否試圖擴展SlidingDrawer?它已經有了滑動動畫。 –

+0

具體的動畫並不是我所追求的。我更想了解繪圖緩存如何工作,以便我可以將其應用於各種UI。 –

+0

也許這是正確的方向:http://android-developers.blogspot.com/2009/01/why-is-my-list-black-android.html – MrJre

回答

2

您可能需要使用它之前建立您的繪圖緩存,否則它會給你一個空白的位圖

public void someButtonClicked(View view) { 
    detailPanel.startAnimation(detailEnterAnimation); 
    detailPanel.setVisibility(View.VISIBLE); 
    detailPanel.setDrawingCacheEnabled(true); 
    detailPanel.buildDrawingCache(); //may be you need to add this? 
    } 
5

從Android文檔(http://developer.android.com/reference/android/view/View.html#setDrawingCacheEnabled%28boolean%29):

啓用繪圖緩存是類似在硬件加速關閉時設置圖層。啓用硬件加速時,啓用繪圖緩存對渲染沒有影響,因爲系統使用不同的加速機制來忽略標記。如果要爲視圖使用位圖,即使啓用了硬件加速,請參閱setLayerType(int,android.graphics.Paint)以獲取有關如何啓用軟件和硬件層的信息。

也許這是你的情況?