在canvas.drawVertices(...)
,有3种模式。即Canvas.VertexMode.TRIANGLES
,Canvas.VertexMode.TRIANGLES_FAN
和Canvas.VertexMode.TRIANGLES_STRIP
我能理解Canvas.VertexMode.TRIANGLES_FAN
和Canvas.VertexMode.TRIANGLES_STRIP
。但不是Canvas.VertexMode.TRIANGLES
Canvas.VertexMode.TRIANGLES
是否也会从下面的verts
的前3个坐标中绘制一个三角形,并忽略其他?即它忽略了verts
的最后2个坐标,即{width/3f, height.toFloat(), 0f, height.toFloat()}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
if (width == 0 || height == 0) return
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
val verts = floatArrayOf(
0f, 0f,
width.toFloat(), 0f,
width/2f, height.toFloat(),
width/3f, height.toFloat(),
0f, height.toFloat()
)
canvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.size, verts, 0,
null, 0, null, 0, null, 0, 0, paint)
}
显然,对于TRIANGLES
,它需要3x的坐标,例如,3,6,9,12 ......所以每个3组坐标将被绘制为三角形。
例如。使用下面的verts
将绘制2个三角形。
val verts = floatArrayOf(
0f, 0f,
width.toFloat(), 0f,
width/2f, height.toFloat(),
width/3f, height.toFloat(),
10f, height.toFloat() - 10f,
10f, 10f
)