Kotlin中如何实现S_Group的toDef方法以渲染列表内多个SVG图形
解决方案
直接遍历列表内所有形状实例,分别调用toDef()方法后拼接所有返回字符串即可,Kotlin中可以用joinToString快速实现:
class S_Group(val obj: List<S> ) : S(0, 0, 200, 200) { override fun toDef() = obj.joinToString(separator = "\n") { it.toDef() } }
说明
joinToString会逐一遍历obj列表中的每个形状实例,调用每个实例自己的toDef()方法拿到对应的SVG标签字符串,最后用换行符拼接为完整的字符串返回,刚好匹配toDef()方法的返回值要求。- 你之前遇到的语法报错是因为误用了方法引用语法,此处不需要使用方法引用,直接通过实例调用
it.toDef()即可拿到对应结果。
可选优化(自适应画布尺寸)
如果不想把S_Group的画布尺寸硬写为200*200,可以修改构造方法自动计算所有子元素的覆盖范围,自动适配画布大小:
class S_Group(val obj: List<S>) : S( x = obj.minOf { it.x }, y = obj.minOf { it.y }, w = obj.maxOf { it.w }, h = obj.maxOf { it.h } ) { override fun toDef() = obj.joinToString("\n") { it.toDef() } }
修改后使用你给出的测试用例,即可同时渲染绿色半透明矩形和红色半透明圆形,不会再出现空画布的问题。
内容的提问来源于stack exchange,提问作者love Croquembouch
相关产品推荐
相关产品推荐

