在compose中的Canvas用kotlin显示多数据波形闪烁的问题

在compose中的Canvas显示多数据波形闪烁的问题:当在Canvas多组记录波形数组时,从第一组开始记录多次显示,如图,当再次回到第一次记录位置再显示时,波形出现闪烁。

原码如下:

复制代码
data class DcWaveForm(
    var bDat: Boolean,
    var isOpenEar:Boolean,
    var count:Int,
    val dat: IntArray = IntArray(20) ,  //220
    var lPoints: Array<Offset> = List(140){Offset(0f,0f)}.toTypedArray(),
    var rPoints: Array<Offset> = List(140){Offset(0f,0f)}.toTypedArray()
) 
复制代码
class MyViewModel : ViewModel() {
    
    var mWaveForm: Array<DcWaveForm> by mutableStateOf(Array(11) {
        DcWaveForm(
            bDat = false,
            isOpenEar = false,
            count = 0,
            dat = IntArray(20) { 0 },
            lPoints = List(140){Offset(0f,0f)}.toTypedArray(),
            rPoints = List(140){Offset(0f,0f)}.toTypedArray()
        )
    })
        var mStartCount by mutableStateOf(0)
           private set
    // 安全访问方法
    fun getWaveFormData(index: Int): DcWaveForm? {
        return mWaveForm.getOrNull(index)
    }

    // 批量更新方法
    fun updateWaveArray(index: Int, block: DcWaveForm.() -> Unit) {
        mWaveForm = mWaveForm.apply {
            getOrNull(index)?.let { data ->
                this[index] = data.apply(block)
            }
        }
    }
    fun updateStartCount(count:Int){
        mStartCount = count
    }
   
}

val viewModel = MyViewModel()

复制代码
pointsLeft和pointsRight前面已经定义过,以为一直用就可以了,其它不然。直接用会出现闪烁,要重新定义则正常,如下:
相关推荐
杉氧2 小时前
Navigation Compose 深度实践:如何优雅地串联起你的全栈 App?
android·架构·android jetpack
唐青枫4 小时前
Kotlin 运算符重载详解:为什么 a += b 有时改对象,有时换对象?
kotlin
雨白6 小时前
指针与数组的核心机制
android
黄林晴10 小时前
Room 3.0 正式发布!包名彻底重构,KMP 成为核心主线
android·android jetpack
三少爷的鞋11 小时前
Kotlin 协程环境下的 DCL 懒加载:别把线程时代的经验直接搬过来
android
plainGeekDev11 小时前
Gson → kotlinx.serialization
android·java·kotlin
CYY951 天前
Compose 入门篇
android·kotlin
杉氧1 天前
Compose 时代的 MVI 架构:如何用单向数据流驱动复杂 UI?
android·架构·android jetpack
杉氧1 天前
Modifier 的艺术:为什么链式调用的顺序决定了UI 的生命周期?
android·架构·android jetpack