1

我有一个布局,它作为 ImageView、ListView、一些 TextViews 等包装在 ScrollView 中。每当用户滚动父视图时,都会调用所有子视图的 draw() 方法。由于我的 ImageView 是动态构建的复杂位图,因此滚动确实变得迟钝,因为我的 imageview 的 draw() 被连续调用,它委托给 ImageView.onDraw() 并反过来委托给我的复杂 ConstructMyBitmap.draw() 并重绘我的每次的位图。

我需要在滚动事件上抑制这个 imageView.onDraw() 调用。每次滚动发生时,我都不想重绘复杂的位图。

如何识别 onDraw() 中的滚动事件?

或者有没有更好的方法来处理这个?

致罗曼盖伊:

   protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if(chart != null && chart.shdRedraw())
            {
               chart.draw(canvas);
        }else
            {
              //Do nothing - Canvas should retain the old data
            }
        // :-) Happy, Now I control when the chart shd be drawn but.. :-(

    }

不幸的是,当 onDraw() 被调用 onScroll 事件并且我决定不绘制图表时,结果是一个空白图表区域。onDraw() 中给我的画布不包含之前绘制的信息。不知道 onDraw() 是否刷新画布?对此有何指导?

4

1 回答 1

1

屏幕需要在滚动时重绘,因此实现所需内容的唯一方法是缓存您的视图(使用视图的 drawingCacheEnabled 属性)。然而,这在内存方面是昂贵的。您为什么不简单地更改您的 draw() 代码,以便仅在更改昂贵的位图时重新创建它?

于 2012-03-08T19:17:42.927 回答