自定义视图 - 避免在非交互时重绘

时间:2010-05-04 10:29:32

标签: android optimization rendering

我有一个复杂的自定义视图 - 照片拼贴。

观察到的是,无论何时发生任何UI交互,都会重新绘制视图。

如果单击“返回”按钮返回上一个活动,我怎么能避免完全重绘(例如,使用缓存的UI)视图,因为这也会导致重新绘制视图。

在探索API和网络时,我找到了一种方法 - getDrawingCache() - 但不知道如何有效地使用它。

如何有效地使用它?

我在自定义视图中遇到了其他问题,我概述了here

2 个答案:

答案 0 :(得分: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);
   }
}

答案 1 :(得分:0)

首先,您必须使用setDrawingCacheEnabled(true)方法,以便View是启用缓存的。然后,您可以使用getDrawingCache(boolean)方法返回表示视图的Bitmap。然后,您可以手动绘制该位图。

如果您未通过调用setDrawingCacheEnabled(true)方法启用缓存,则必须先致电buildDrawingCache()(并在完成后致电destroyDrawingCache())。

再见!