问题描述
我正在使用自定义视图来绘制矩形(在某个点将在其中包含文本),并且我想在选择时突出显示每个矩形,当用户选择一个矩形时,这将每隔几秒钟发生一次。我应该在 onDraw 中实现突出显示的矩形,还是有办法只重绘每个矩形而不重绘整个视图?我正在考虑使用“invalidate(rect)”,但它已被弃用。
与仅重绘矩形相比,我试图考虑使整个 View 无效的成本。
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for(CellCoordinates cellCoordinate : mCoordinateCells) {
canvas.drawText(" ",cellCoordinate.getRect().exactCenterX(),cellCoordinate.getRect().exactCenterY(),cellPaint);
}
}
解决方法
使用 invalidate() 和 onDraw() 很好。 Dirty rect 对 API21+ 并没有真正的影响
不推荐使用脏矩形,因为硬件加速视图中的绘图模型不同。 Checkout this link for more information
此外,您的矩形似乎可以实现为具有状态(选定和正常)的自定义 Drawable。它不会给你额外的性能,但可能有助于划分和构建绘图代码。 This might help