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

我需要在scrollevent上禁止此imageView.onDraw()调用。每次滚动时,我都不想重绘复杂的位图。

如何识别onDraw()中的scrollEvent?

还是有更好的方法来解决这个问题?

对罗曼·盖伊:

   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()是否刷新画布?有什么指导吗?

最佳答案

需要在屏幕上重新绘制屏幕,​​因此实现所需功能的唯一方法是缓存View(使用View的drawingCacheEnabled属性。)但是,这在内存方面是昂贵的。为什么不简单地更改draw()代码,以便仅在更改后重新创建昂贵的位图?

关于android - 如何在Android ScrollEvent上有选择地重绘 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9623401/

10-10 02:17