如何绘制自定义视图的一小部分?

问题描述

我正在使用自定义视图来绘制矩形(在某个点将在其中包含文本),并且我想在选择时突出显示每个矩形,当用户选择一个矩形时,这将每隔几秒钟发生一次。我应该在 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+ 并没有真正的影响

... In API 21 the given rectangle is ignored entirely in favor of an internally-calculated area instead. ...

不推荐使用脏矩形,因为硬件加速视图中的绘图模型不同。 Checkout this link for more information

此外,您的矩形似乎可以实现为具有状态(选定和正常)的自定义 Drawable。它不会给你额外的性能,但可能有助于划分和构建绘图代码。 This might help