我有一个带有项目的惰性列,其中每个项目都有自己的自定义滑块,它是使用 AndroidView() 实现的。问题是滑块的 onDraw() 方法被覆盖了。由于 onDraw() 方法在主线程中运行,在重新组合或滚动期间,UI 开始出现很多延迟。我该如何解决这个问题?
LazyColumn(
modifier = Modifier.fillMaxWidth(), contentPadding = it
) {
itemsIndexed(items = historyState.asReversed())
{ index, history ->
HistoryItem(
name = history.groupName,
progress= history.progress)
}
}
@Composable
fun HistoryItem(name: String,progress:Float)
{
Column{
Text(text = name)
WaveFormCompose(
modifier = Modifier
.weight(0.7F)
.padding(8.dp),
progress = progress,
audioData = someData,
audioTrack = someByteBuffer,
onSeekStarted = {onSeekStarted(it)},
onSeekFinished = {},
)
}
}
组合函数 WaveFormCompose() 如下所示:
@Composable
fun WaveFormCompose(
modifier: Modifier,
progress: Float,
audioTrack: ReplayTrack?,
audioData: ByteBuffer?,
onSeekStarted: (Float) -> Unit,
onSeekFinished: (Float) -> Unit,
) {
AndroidView(modifier = modifier,
factory = { context ->
WaveformSlider (context).apply {
this.audioData = audioData
value = progress
},
update ={
it.value =progress
})
现在 WaveFormSlider 类是一个自定义视图,它扩展了 Google material Slider,并覆盖了它的 onDraw() 方法。 内部类
class WaveformSlider @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null){
Slider(context, attrs)
override fun onDraw(canvas: Canvas) {
if (heights == null) {
computeHeights()
}
// Draw waveform
for (i in 0 until (heights?.size ?: 0)) {
val height = heights?.get(i) ?: 0.0f
if (height > 0) {
drawWaveformLine(canvas, i, height)
}
}
super.onDraw(canvas)
}
}
反转操作是重操作,应按如下方式进行:
val reversedList = remember(historyState) { historyState.asReversed() }
请检查并通知我