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

发布于 2024-08-31 02:39:42 字数 375 浏览 3 评论 0原文

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

我们观察到,每当发生任何 UI 交互时,视图就会重新绘制。

如何避免视图的完全重绘(例如,使用缓存的 UI),特别是当我单击“后退”按钮返回到上一个活动时,因为这也会导致视图的重绘。

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

我该如何有效地使用它?

我在此处概述了自定义视图的其他问题。

I have a complex custom view - photo collage.

What is observed is whenever any UI interaction happens, the view is redrawn.

How can I avoid complete redrawing (for example, use a cached UI) of the view specially when I click the "back" button to go back to previous activity because that also causes redrawing of the view.

While exploring the API and web, I found a method - getDrawingCache() - but don't know how to use it effectively.

How do I use it effectively?

I've had other issues with Custom Views that I outline here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦在深巷 2024-09-07 02:39:42

我找到了比使用 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);
   }
}

I found a better way than using getDrawingCache.

In the method onDraw, apart from drawing in the natural canvas, I also draw on an memory-only canvas.

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);
   }
}
等待圉鍢 2024-09-07 02:39:42

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

如果您没有通过调用 setDrawingCacheEnabled(true) 方法启用缓存,则必须在此之前调用 buildDrawingCache()(并调用 destroyDrawingCache()代码> 完成后)。

再见!

First of all you will have to use the setDrawingCacheEnabled(true) method, so that you're View is cache-enabled. Then, you can use the getDrawingCache(boolean) method which returns a Bitmap representing the View. Then, you can draw that bitmap manually.

If you don't enable caching by calling the setDrawingCacheEnabled(true) method, you will have to call buildDrawingCache() before (and call destroyDrawingCache() when you're done).

Bye!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文