我有一个Layout,它作为一个ImageView,ListView,一些TextViews等包装在ScrollView中。每当用户滚动父视图时,都会调用所有子视图的draw()方法。由于我的ImageView是一个动态构建的复杂位图,因此我的imageview的draw()被连续调用,它会延迟到ImageView.onDraw(),然后委托给我复杂的ConstructMyBitmap.draw()并重绘我的每次都有位图。
我需要在scrollevent上禁止这个imageView.onDraw()调用。每当滚动发生时我都不想重绘我的复杂位图。
如何在onDraw()中识别scrollevent?
或者有更好的方法来处理这个问题吗?
致Romain Guy:
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()是否刷新了画布?对此有何指导?
答案 0 :(得分:1)
屏幕需要在滚动上重绘,因此实现所需内容的唯一方法是缓存View(使用View的drawingCacheEnabled属性。)但这在内存方面是昂贵的。为什么不简单地将draw()代码更改为仅在更改时重新创建昂贵的位图?