我有一个填满整个屏幕的自定义视图。(钢琴键盘)当用户触摸键时,它会invalidate()
被调用,整个键盘被重绘以显示触摸键的新状态。
目前视图非常简单,但我计划添加更多漂亮的图形。由于整个键盘是动态渲染的,因此重绘整个键盘的成本会更高。
所以我想,让我们看看部分重绘。现在我invalidate(Rect dirty)
用正确的脏区打电话。onDraw(Canvas canvas)
如果我确实想要部分重绘,我将我的方法设置为仅在脏区中绘制键。这导致这些键被绘制,但键盘的其余部分完全是黑色的/根本没有绘制。
我期望调用invalidate(Rect dirty)
会“缓存”当前canvas
,并且只“允许”在脏区域中绘制,我错了吗?
有什么办法可以实现我想要的吗?(一种“缓存”画布并只重绘脏区的方法?”