我有一个复杂的自定义视图 - 照片拼贴。
观察到的是,无论何时发生任何UI交互,都会重新绘制视图。
如果单击“返回”按钮返回上一个活动,我怎么能避免完全重绘(例如,使用缓存的UI)视图,因为这也会导致重新绘制视图。
在探索API和网络时,我找到了一种方法 - getDrawingCache()
- 但不知道如何有效地使用它。
如何有效地使用它?
我在自定义视图中遇到了其他问题,我概述了here。
答案 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()
)。
再见!