Android 心电贴I单导联波形绘制,实测有效

package cn.dankal.yankercare.views;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.ViewGroup;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import cn.dankal.yankercare.R;

/**

  • SurfaceView适用于需要频繁更新UI的场合。

  • 整个过程:继承SurfaceView并实现SurfaceHolder.Callback接口 ----> SurfaceView.getHolder()获得SurfaceHolder对象

  • ---->SurfaceHolder.addCallback(callback)添加回调函数---->SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布---->

  • Canvas绘画 ---->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图,并提交改变,将图形显示。
    */
    public class RealTimeEcgView1 extends SurfaceView implements SurfaceHolder.Callback {

    private static final String TAG = “RealTimeEcgView”;
    private Context mContext;
    private static int samplingRate = 250;
    //默认增益:10mm/mv
    private float ecgGain = 1;
    private final float VERTICALLINENULL = 0f;
    private final float VERTICALLINEFIVE = 1f;
    private final float VERTICALLINETEN = 2f;
    private final float VERTICALLINETWENTY = 4f;
    //走速
    private float ecgSpeed = 25f;

    private SurfaceHolder holder;

    private Path path, gainPath;

    private Paint bgBaseLinePaint, bgBigPaint, bgSmallPaint, lnPaint, gainPaint, textPaint;//背景画笔和折线画笔

    private float unitWidth;//单元格的宽度

    private int width, height;//控件的宽和高

    private boolean isInit = true;

    private float xDistance = 1;//相邻两点沿x轴方向上的间距

    private float mStartX = 0;//心电图在x轴方向上的起始位置

    private int regX = -5;//矩形区域的x轴方向的起始位置

    private float gridCount = 50.0f; //定义5mv的高度

    private float mvData = 1;

    private String leadText = “”;

    private ExecutorService pool = Executors.newSingleThreadExecutor();//绘图线程池

    public void drawEcg(final int[] ecgData) {
    if (ecgData == null || ecgData.length < 1 || pool == null)
    return;
    pool.submit(new Runnable() {
    @Override
    public void run() {
    drawECG(false, ecgData);
    }

你可能感兴趣的:(android)