首页 > 解决方案 > 重绘部分视图 OnDraw(canvas: Canvas)

问题描述

我有一个视图,它的图像分为四层,但是当我使视图无效()时,更改只会更新其中一层。我的应用程序性能不佳,因为每次调用 invalidate() 时,onDraw() 都会为图层绘制所有内容。我只想重绘具有参数更改的图层。有可能吗?

    private enum class Layer(val resource: Int) {
        BACKGROUND(R.drawable.ic_compass_background),
        MID(R.drawable.ic_compass_mid_layer),
        WIND_ROSE(R.drawable.ic_compass_outline),
        AIRCRAFT_HEADING(R.drawable.ic_compass_aircraft_heading)
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        canvas.save()
        canvas.drawBitmap(getBitmap(Layer.BACKGROUND), getMatrix(getBitmap(Layer.BACKGROUND)), null)
        canvas.drawBitmap(getBitmap(Layer.MID), getMatrix(getBitmap(Layer.MID)), null)
        canvas.drawBitmap(getBitmap(Layer.WIND_ROSE), getMatrix(getBitmap(Layer.WIND_ROSE), 90f), null)
        canvas.drawBitmap(getBitmap(Layer.AIRCRAFT_HEADING), getMatrix(getBitmap(Layer.AIRCRAFT_HEADING), headingAngle), null)
        canvas.restore()
    }

    fun turnHeadingRotation(angle: Float) {
        if (headingAngle != angle) {
            this.headingAngle = angle
            invalidate()
        }
    }

标签: androidperformanceandroid-studiokotlinandroid-custom-view

解决方案


推荐阅读