Когда я drawVertices
, мне нужно поместить 6 цветов вместо 3, хотя у меня только 3 координаты.
setLayerType(View.LAYER_TYPE_SOFTWARE, null)
val verticesColors = intArrayOf(
Color.RED, Color.GREEN, Color.BLUE,
-0x1000000, -0x1000000, -0x1000000)
val verts = floatArrayOf(0f, 0f, width.toFloat(), 0f, width/2f, height.toFloat())
canvas.drawVertices(
Canvas.VertexMode.TRIANGLES,
verts.size, verts, 0,
null, 0,
verticesColors, 0,
null, 0, 0,
paint
)
Изображение как ниже
Однако я запутался, почему мне нужно иметь значение -0x1000000
, как показано ниже?
val verticesColors = intArrayOf(
Color.RED, Color.GREEN, Color.BLUE,
-0x1000000, -0x1000000, -0x1000000)
Если я удаляю -0x1000000
, он вылетит изнутри
--------- beginning of crash
2019-04-05 00:27:34.793 15461-15461/? A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 15461 (anvasexperiment), pid 15461 (anvasexperiment)
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.075/5124027:user/release-keys'
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: Revision: '0'
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: ABI: 'x86'
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: pid: 15461, tid: 15461, name: anvasexperiment >>> com.elyeproj.canvasexperiment <<<
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: Abort message: 'bad length'
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: eax 00000000 ebx 00003c65 ecx 00003c65 edx 00000006
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: edi 00003c65 esi ffc8f7ec
2019-04-05 00:27:34.824 15496-15496/? A/DEBUG: ebp ffc8f7b8 esp ffc8f748 eip e9ff8b39
2019-04-05 00:27:34.967 15496-15496/? A/DEBUG: backtrace:
2019-04-05 00:27:34.968 15496-15496/? A/DEBUG: #00 pc 00000b39 [vdso:e9ff8000] (__kernel_vsyscall+9)
2019-04-05 00:27:34.968 15496-15496/? A/DEBUG: #01 pc 0001fdf8 /system/lib/libc.so (syscall+40)
2019-04-05 00:27:34.968 15496-15496/? A/DEBUG: #02 pc 00022ed3 /system/lib/libc.so (abort+115)
2019-04-05 00:27:34.968 15496-15496/? A/DEBUG: #03 pc 00006c84 /system/lib/liblog.so (__android_log_assert+292)
Если я заменю его чем-то другим, например, Color.RED
, это не имеет никакого влияния.
Мне интересно, какова его функция?
например. в примере в https://stackoverflow.com/a/3509969/3286489, также показаны дополнительные 3 0xFF000000
, необходимые в массиве цветов. Не уверен, с какой целью?
Обновление
проверяю под капотом функцию drawVertices
, код подтверждения как ниже
checkRange(colors.length, colorOffset, vertexCount / 2);
Это означает, что color.length
должно быть равно или больше vertexCount / 2
Следовательно, для 3 координат достаточно 3 цветов. Поэтому странно, что нам нужно 6 цветных элементов.