我正在使用库https://github.com/Armen101/AudioRecordView以可视化语音录制。这在一段时间内运行良好,但当我重新组织布局时,AudioRecordView
停止显示块。视图仍然可见(当我将背景设置为红色时,我看到红色视图(,amlitude仍然正确计算(在0和28000之间(,并且当我调用update
方法时,视图不为null。我也只有1个AudioRecordView
,所以我不能更新错误的。
以下是AudioRecordView
:的xml
<com.visualizer.amplitude.AudioRecordView
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/audioRecordView"
android:layout_marginEnd="38dp"
android:layout_marginStart="60dp"
android:background="@color/colorRed"
android:layout_width="match_parent"
android:layout_height="70dp"
app:chunkAlignTo="center"
app:chunkColor="#FFFFFF"
app:chunkMaxHeight="48dp"
app:chunkMinHeight="20dp"
app:chunkRoundedCorners="true"
app:chunkSoftTransition="false"
app:chunkSpace="1dp"
app:chunkWidth="2dp"
app:direction="leftToRight" />
这是update
调用:
timer.schedule(object : TimerTask() {
override fun run() {
val currentMaxAmplitude = mediaRecorder?.maxAmplitude ?: 0
audioRecordView!!.update(currentMaxAmplitude)
}
}, 0, 100)
再次:当计时器运行时,振幅计算正确,AudioRecordView
不为零。
视图jsut不再绘制块。
解决方案是显式调用runOnUiThread
:
timer.schedule(object : TimerTask() {
override fun run() {
val currentMaxAmplitude = mediaRecorder?.maxAmplitude ?: 0
activity.runOnUiThread {
audioRecordView?.update(currentMaxAmplitude / 2)
}
}
}, 0, 100)
不知道为什么它以前工作,我总是假设库确保它在update
方法中的UI线程上更新。也许我用了新版图书馆?!我现在在'com.github.Armen101:AudioRecordView:1.0.5'
,。。。