这是我在做项目的时候的一个需求,根据蓝牙设备采集到的数据画出心电图。 由于以前没有做过类似的东西,当我拿到这个需求的时候 整个人都不好了,没办法只能硬着头皮上呗。然后就开始在网上疯狂的找Demo,皇天不负有心人,我果然没有找到完全符合我们需求的demo,没有办法只能自己撸一个出来。先上一个效果图 (这只是demo想要好看点可以自己调)。
数据只是使用的随机数,所以看起来有点不专业,当画完一屏幕的点后,会有类似擦除效果来更新我们的心电图,就和医院的类似。横坐标与纵坐标的值都可以自己修改,比如将横坐标修改成时间,都是行的,下面开始工作。
在开始定义以前,首先介绍一下android 的坐标系统如上图,android的坐标和我们数学中学习的坐标差不多,只是将坐标原点定在了左上角,某一点的坐标我们根据宽高来确定。比如右下角的坐标:Y坐标是当前位置距顶部的高度,X是当前位置距左边的距离,假设距顶部的距离为Height,距左边的距离为width那么该点的坐标为(width,height);
说了这么多咱们开始进入正题
1、定义ECGView继承自View,并实现重写它的三个构造函数(其实只需要重写两个参数就行,但是以备不时之需还是都写了)
2.定义declare-styleable标签,命名空间的时候使用
<declare-styleable name="elg">
<attr name="BackLineColor" format="color"/>
<attr name="TitleColor" format="color"/>
<attr name="PointerLineColor" format="color"/>
<attr name="TitleSize" format="dimension"/>
<attr name="XYTextSize" format="dimension"/>
</declare-styleable>
BackLineColor为背景图中表格线的颜色,TitleColor标题颜色,PointerLineColor波形图线的颜色,TitleSize标题文字大小,XYTextSize XY轴文字的大小。
然后在构造方法中初始化
public ECGView(Context context, AttributeSet attrs) {
super(context, attrs);
_context = context;
TypedArray typedArray = context.obtainStyledAttributes(attrs,
R.styleable.elg);
_backLineColor = typedArray.getColor(R.styleable.elg_BackLineColor,
Color.GREEN);
_titleColor = typedArray
.getColor(R.styleable.elg_TitleColor, Color.RED);
_p