首页 > 解决方案 > 在画布上渲染 ViewGroup

问题描述

我正在实现一个小型库,以便在 RecyclerView 上轻松添加自定义视图滑动操作。在我的实现过程中,我在画布上渲染视图时遇到了一个问题。我在这里附上了一个 gif 来展示这个问题:

展示柜

在画布上绘制滑动视图时,我执行以下操作:

    private fun renderSwipeView(
        view: View,
        c: Canvas,
        width: Int,
        height: Int,
        transX: Float,
        transY: Float
    ) {
        view.measure(
            View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
            View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)
        )
        view.layout(0, 0, width, height)

        c.withTranslation(transX, transY) {
            view.draw(c)
        }
    }

这通常可以正常工作,但我看到使用视图类型渲染的问题。在 GIF i 中,绿色布局是一个以布局顶部为中心的正方形。所以我知道布局以正确的大小呈现,并且元素的布局也正确完成。

问题 1:蓝色框是TextView's with,singleLine=true因为我希望顶部的元素整齐地显示文本。向右滑动基本上可以正常工作,但是在向左滑动时,根本不会呈现文本。我试图渲染这个相同的案例,而不是将它渲染到可以正常工作的 Canvas 上。在画布上渲染视图时是否遗漏了某些部分?

问题 2:不是什么大问题,但滑动视图(红色/橙色容器)将呈现在其布局之外。我可以通过canvas.clipRect()在画布上使用来轻松解决这个问题,但我想解决这个问题的根本原因,而不是做一个解决方法。

可以在此处查看包含此演示的完整源代码。

谢谢最好的问候

标签: androidandroid-layoutkotlincanvas

解决方案


关于问题 1:我刚刚设法解决了第一个问题。它似乎与 TextView 中的错误有关,通过切换到 AppCompatTextView 问题得到解决。


推荐阅读