效果图:
心电图是被记录在布满大小方格的纸上,所以想要知道心电图怎么看,首要的是知道这些格子代表的意义。这些方格中每一条细竖线相隔1mm,每一条细横线也是相隔1mm,它们围成了1mm见方的小格。粗线是每五个小格一条,每条粗线之间相隔就是5mm,横竖粗线又构成了大方格。
心电图记录纸是按照国际规定的标准速度移动的,移动速度为25mm/s,也就是说横向的每个小细格代表0.04s;每两条粗线之间的距离就是代表0.2s。
国际上对记录心电图时的外加电压也是有规定的,即外加1mV电压时,基线就应该准确地抬高10个小格,也就是说,每个小横格表示0.1mV,而每个大格就表示0.5mV,每两个大格就代表了这1mV。
特点:
- 走纸速度不固定,不是标准的25mm/s
- 一屏显示2秒的数据量;
标准的波形图,代码注释,请参考:心电波形图EcgView
动态适配版本:
package com.kl.common_base.view.wave;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import com.kl.common_base.R;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class PdfEcgWaveView extends View {
private List<Short> pointList = Collections.synchronizedList(new LinkedList<>());
private Paint mPaint;
private Paint mPaintLine;
private int mWidth = 0;
private int mHeight = 0;
private int mCenterY = 0;
public float points[];
List<Short> nativeDatas = null;
private int len = 0;
private int index = 0;
private double zoom;
private double gapX = 0.2f;
private int xSize = 0;
private final int maxMillimeter = 25;
private final int FILTER_SIZE = 1;
private int sampleRate = 8000 / FILTER_SIZE;
private int gain = 5;
private final int maxMidScopeY = 0;
private double screenTotalTime;
private int[] lineArray;
private int[] cycleArray;
private Map<Integer, Integer> lineMap = new HashMap();
// private List<Float> xList = new ArrayList<>();
public PdfEcgWaveView(Context context) {
super(context);
// Log.d("caowj", "55555555555555555555555555");
initPaint();
}
public PdfEcgWaveView(Context context, AttributeSet attrs) {
super(context, attrs);
// Log.d("caowj", "66666666666666666666666666");
initPaint();
}
public PdfEcgWaveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// Log.d("caowj", "77777777777777777777777777");
initPaint();
}
private void initPaint() {
// Log.d("caowj", "initPaint--------------");
if (mPaint == null) {
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(2);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStyle(Paint.Style.STROKE);
}
if (mPaintLine == null) {
mPaintLine = new Paint();
mPaintLine.setColor(getContext().getResources().getColor(R.color.red));
mPaintLine.setAntiAlias(true);
mPaintLine.setStrokeWidth(2);
mPaintLine.setStrokeCap(Paint.Cap.ROUND);
mPaintLine.setStyle(Paint.Style.STROKE);
}
}
public void addWaveDataInVisiable(short[] waveData, int[] peakArray, int[] cycleArray) {
if (peakArray != null