首页 > 代码库 > Android心电动态显示及保存
Android心电动态显示及保存
项目描述:下位机采集心电和心率数据通过蓝牙传给手机,手机将接收得到的心电数据用心电图描绘出来,同时显示心率值。每次采集的数据都会保存下来以便日后查询。
实现方案:包含几大部分:蓝牙传输部分,接收数据包解包部分,绘制波形部分,动态显示心率值部分,数据的保存与读取部分。通过蓝牙读取数据,绘制心电波形,保存文件都是耗费时间的工作,所以各自开三个线程。使用蓝牙功能要在Manifest文件里声明使用权限和管理权限,代码部分就是按照步骤一步一步地实现。心率值显示用Handler()方法实现实时更新。
这里列举绘制心电波形的代码,主要用到了Serfaceview和Thread:
public void dawECGWave() {
new Thread() {
public void run() {
int newX = 0;// 当前绘制的x坐标
float newY = 0;// 当前绘制的y坐标
int baseLine;// 基线
Paint mPaint;// 画笔
Canvas canvas;// 画布
oldY = -1;
int n = 2;
while (!stopDrawWaveThread) {
if (start > sfv.getWidth()) {
start = 0;
oldX = 0;
Log.d("Clear", "Clear");
}
canvas = sfv.getHolder().lockCanvas(
new Rect( start, 0, start + 15, sfv
.getBottom()));
canvas.drawColor(Color.TRANSPARENT,
android.graphics.PorterDuff.Mode.CLEAR); // 清除上次绘制
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
baseLine = canvas.getHeight() / 2;
mPaint = new Paint();
mPaint.setColor(Color.GREEN);
mPaint.setAntiAlias(true);// /平滑线
mPaint.setStrokeWidth(1.6f);// /画笔宽
if (dataQueue.size() >= 5) {
newX = oldX + 5 * speed;
int data = 16384;
int dataTmp = dataQueue.poll();
if (Math.abs(16384 - dataTmp) > Math.abs(16384 - data)) {
data = dataTmp;
}
dataTmp = dataQueue.poll();
if (Math.abs(16384 - dataTmp) > Math.abs(16384 - data)) {
data = dataTmp;
}
dataTmp = dataQueue.poll();
if (Math.abs(16384 - dataTmp) > Math.abs(16384 - data)) {
data = dataTmp;
}
dataTmp = dataQueue.poll();
if (Math.abs(16384 - dataTmp) > Math.abs(16384 - data)) {
data = dataTmp;
}
dataTmp = dataQueue.poll();
if (Math.abs(16384 - dataTmp) > Math.abs(16384 - data)) {
data = dataTmp;
}
newY = (float) ((16384 - data) * 0.00107 * 15 * gain + baseLine);// /Y值计算方法
if(oldY == -1){
oldX = 0;
oldY = newY;
start = oldX;
sfv.getHolder().unlockCanvasAndPost(canvas);
continue;
}
canvas.drawLine(oldX, oldY, newX, newY, mPaint);
canvas.drawLine(oldX, oldY+1, newX, newY+1, mPaint);
oldX = newX;
oldY = newY;
}
start = oldX;
sfv.getHolder().unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像
}
}
}.start();
}
其他代码就不一一列举,有兴趣的话可以找我交流。
Android心电动态显示及保存