Android canvas绘制心电图
2017-05-26 本文已影响389人
ldclll
通过蓝牙获取到心电数据,使用canvas绘制心电图及背景网格,代码如下
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建画笔
Paint p = new Paint();
//设置绿色
p.setColor(Color.GREEN);
//获得当前屏幕宽度
WindowManager wm = (WindowManager) getContext()
.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
//离上方的高度
int top = 100;
//------------------画背景表格-----------------
//画竖线
for (int x = 0;x < width;x+=15) {
//心电图网格5小格构成一大格,大格加粗,需要判断当前是否绘制到第5的倍数条线段
if (x%75==0) {
p.setStrokeWidth((float)2);
} else {
p.setStrokeWidth((float)1);
}
canvas.drawLine(x, top, x, 555, p);
}
//画横线
for (int y = top;y < 555;y+=15) {
//同理加粗
if ((y-top)%75==0) {
p.setStrokeWidth((float)2);
} else {
p.setStrokeWidth((float)1);
}
canvas.drawLine(0, y, width, y, p);
}
//-----------------------------------------
//画数据
for (int i = 0;i < pointList.size();i++) {
//设置红色
p.setColor(Color.RED);
p.setStrokeWidth((float)2);
int currentData = (int) pointList.get(i);
// if (currentPt.y != 325) {
// System.out.println("错误数据:"+currentPt);
// }
if (i==0) {
//从表格(0,y/2)开始画
canvas.drawLine(0, 325, i, currentData, p);
} else {
//取出上一个点
int beyongData = (int) pointList.get(i-1);
//连接上一个和当前点
canvas.drawLine(i-1, beyongData, i
, currentData, p);
//判断是否画到最右边
if (i%width == 0) {
//清除数据
pointList.clear();
}
}
}
}
public void setLineData(int data) {
//添加数据
pointList.add(data);
// System.out.println("size:"+pointList.size());
//重绘
invalidate();
}
至此,canvas绘制心电图的代码已完成
//蓝牙通知回调
public void setNotify(UUID serviceUUID, UUID characterUUID) {
mClient.notify(MAC, serviceUUID, characterUUID, new BleNotifyResponse() {
@Override
public void onNotify(UUID service, UUID character, byte[] value) {
//解析value,提取出value中的心电数据,调用
view.setLineData(ECGData);
}
@Override
public void onResponse(int code) {
}
});
}