【问题标题】:Custom View - Avoid redrawing when non-interactive自定义视图 - 非交互时避免重绘
【发布时间】:2010-05-18 13:14:43
【问题描述】:

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

观察到的是,每当发生任何 UI 交互时,都会重绘视图。

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

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

如何有效地使用它?

我在here 概述的自定义视图方面遇到了其他问题。

【问题讨论】:

    标签: android optimization rendering


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      如果您不通过调用setDrawingCacheEnabled(true) 方法启用缓存,则必须在之前调用buildDrawingCache()(完成后调用destroyDrawingCache())。

      再见!

      【讨论】:

      • 您好卡西迪亚布罗,感谢您的回复。在更新/刷新更频繁的情况下,是否建议有这样的缓存?还是仅当我们知道需要显示什么时才适用 - 动态的,但一旦定义就可以了!
      猜你喜欢
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多