android - 在画布上渲染 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()
在画布上使用来轻松解决这个问题,但我想解决这个问题的根本原因,而不是做一个解决方法。
可以在此处查看包含此演示的完整源代码。
谢谢最好的问候
解决方案
关于问题 1:我刚刚设法解决了第一个问题。它似乎与 TextView 中的错误有关,通过切换到 AppCompatTextView 问题得到解决。
推荐阅读
- javascript - Express.js 显示未定义的 req.body,其中路由从其他文件重新组合
- java - 如何从给定范围加载日期数组?
- java - java.lang.ClassNotFoundException:用于 Spark 3.0.0 的 org.apache.spark.sql.sources.v2.DataSourceV2
- regex - 使用正则表达式进行 DART 条件查找和替换
- java-8 - 在 Netbeans 中运行项目时如何抑制错误的“Java 版本已过期消息”
- python - 如何在python中将base64字节转换为图像
- javascript - 如何让 async/await 真正等待
- r - 如果另一个变量的下一行满足条件,则定义新变量取 1
- python - Python 类如何在没有在类定义中声明的情况下拥有一个新属性?
- webpack - 为什么要使用 babel-loader,因为 webpack 已经使用了 terser 来缩小 es6+ 代码?