我有一個複雜的自定義視圖 - 照片拼貼。自定義視圖 - 避免重新繪製時非交互式
觀察到什麼是每當任何UI相互作用發生時,該視圖是重繪。
我怎樣才能避免完全重新繪製(例如,使用緩存的用戶界面)的視圖,特別是當我點擊「後退」按鈕回到以前的活動,因爲這也會導致重新繪製視圖。
在探索API和網絡,我發現了一個方法 - getDrawingCache()
- 但不知道如何有效地使用它。
如何有效使用它?
我已經受夠了,我概括here自定義視圖等問題。
我有一個複雜的自定義視圖 - 照片拼貼。自定義視圖 - 避免重新繪製時非交互式
觀察到什麼是每當任何UI相互作用發生時,該視圖是重繪。
我怎樣才能避免完全重新繪製(例如,使用緩存的用戶界面)的視圖,特別是當我點擊「後退」按鈕回到以前的活動,因爲這也會導致重新繪製視圖。
在探索API和網絡,我發現了一個方法 - getDrawingCache()
- 但不知道如何有效地使用它。
如何有效使用它?
我已經受夠了,我概括here自定義視圖等問題。
我發現比使用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);
}
}
首先,你將不得不使用setDrawingCacheEnabled(true)
方法,讓你查看已啓用緩存的。然後,您可以使用返回代表視圖的Bitmap的getDrawingCache(boolean)方法。然後,您可以手動繪製該位圖。
如果您通過調用setDrawingCacheEnabled(true)
方法未啓用緩存,則必須先撥打buildDrawingCache()
(並在完成後再撥打destroyDrawingCache()
)。
再見!
嗨Casidiablo, 感謝您的迴應。 建議在更新/刷新頻率更高的場景中使用像這樣的緩存?或者只有當我們知道需要展示什麼時才適用 - 動態的,但一旦定義就是這樣! – 2010-05-05 04:45:55