
1.创建自定义 View,创建一个继承自View的自定义类,在这个类中实现波形图的绘制逻辑。
package com.zhkh.khpec.utility
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.util.AttributeSet
import android.view.View
import kotlin.math.PI
import kotlin.math.sin
class ACVoltageWaveformView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private val paint: Paint = Paint().apply {
color = Color.BLUE
style = Paint.Style.STROKE
strokeWidth = 4f
}
private var amplitude = 220f // 电压幅值
private var frequency = 1f // 频率
private var phase = 0f // 相位
/**
* 更新视图
* */
fun updateView(frequency:Float){
this.frequency=frequency
invalidate()
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val width = measuredWidth.toFloat()
val height = measuredHeight.toFloat()
val centerY = height / 2
canvas.drawColor(Color.WHITE)
for (x in 0 until width.toInt()) {
val t = x / width * 2f // 模拟时间变化
val y = amplitude * sin(2 * PI * frequency * t + phase) + centerY
if (x > 0) {
val prevX = x - 1
val prevY = amplitude * sin(2 * PI * frequency * (t - 1 / width * 10f) + phase) + centerY
canvas.drawLine(prevX.toFloat(), prevY.toFloat(), x.toFloat(), y.toFloat(), paint)
}
}
}
}2.在布局文件中使用自定义 View
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:ignore="MissingClass"> <com.zhkh.khpec.utility.ACVoltageWaveformView android:id="@+id/waveform_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
3.刷新波形图
//打到id为waveformView的控件,然后调用ACVoltageWaveformView里面的方法updateView binding.waveformView.updateView(i)
本文来自 www.luofenming.com