我有一个布局,它作为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/