2010-05-04 77 views
1

我有一個複雜的自定義視圖 - 照片拼貼。自定義視圖 - 避免重新繪製時非交互式

觀察到什麼是每當任何UI相互作用發生時,該視圖是重繪。

我怎樣才能避免完全重新繪製(例如,使用緩存的用戶界面)的視圖,特別是當我點擊「後退」按鈕回到以前的活動,因爲這也會導致重新繪製視圖。

在探索API和網絡,我發現了一個方法 - getDrawingCache() - 但不知道如何有效地使用它。

如何有效使用它?

我已經受夠了,我概括here自定義視圖等問題。

回答

2

我發現比使用getDrawingCache更好的辦法。

在該方法的onDraw,除了在天然帆布拉伸,我也畫上的只讀存儲器,畫布。

Bitmap cacheBmp = Bitmap.Create(....); 
Canvas cacheCanvas = new Canvas(cacheBmp); 


void onDraw(Canvas c) 
{ 
    if(updateDueToInteraction) 
    { 
    c.drawXXX(...); 
    cacheCanvas.drawXXX(...); 
    } else 
    { 
    c.drawBitmap(cacheBmp, 0, 0); 
    } 
} 
0

首先,你將不得不使用setDrawingCacheEnabled(true)方法,讓你查看已啓用緩存的。然後,您可以使用返回代表視圖的BitmapgetDrawingCache(boolean)方法。然後,您可以手動繪製該位圖。

如果您通過調用setDrawingCacheEnabled(true)方法未啓用緩存,則必須先撥打buildDrawingCache()(並在完成後再撥打destroyDrawingCache())。

再見!

+0

嗨Casidiablo, 感謝您的迴應。 建議在更新/刷新頻率更高的場景中使用像這樣的緩存?或者只有當我們知道需要展示什麼時才適用 - 動態的,但一旦定義就是這樣! – 2010-05-05 04:45:55