新电图

Posted anni-qianqian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新电图相关的知识,希望对你有一定的参考价值。

参考自:手把手教你打造一个心电图效果View Android自定义View

效果图

技术图片

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    tools:context="com.wingsofts.cardiograph.MainActivity">

    <View
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:background="#000000" />

    <com.wingsofts.cardiograph.PathView
        android:layout_width="match_parent"
        android:layout_height="300dp" />
</RelativeLayout>

自定义控件

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class PathView extends View {
    //画笔
    protected Paint paint;
    //心电图折现
    protected Path path;
    //自身的大小
    private int width, height;
    //折现的颜色
    private int lineColor = Color.parseColor("#76f112");

    public PathView(Context context) {
        this(context, null);
    }

    public PathView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public PathView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        paint = new Paint();
        path = new Path();
    }

    private void drawPath(Canvas canvas) {
        // 重置path
        path.reset();
        //用path模拟一个心电图样式
        //1.初始位置x=0,y在中间
        path.moveTo(0, height / 2);
        int tmp = 0;
        for (int i = 0; i < 10; i++) {
            //平移
            path.lineTo(tmp + 100, height / 2);
            //上滑
            path.lineTo(tmp + 120, height / 2 - 100);
            //下滑
            path.lineTo(tmp + 140, height / 2 + 100);
            //上滑
            path.lineTo(tmp + 160, height / 2 - 200);
            //下滑
            path.lineTo(tmp + 180, height / 2 + 200);
            //回到中间
            path.lineTo(tmp + 200, height / 2);
            //平滑
            path.lineTo(tmp + 300, height / 2);
            //x坐标增加到第二次循环开始的地方
            tmp = tmp + 300;
        }
        //设置画笔style
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(lineColor);
        paint.setStrokeWidth(5);
        canvas.drawPath(path, paint);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        width = w;
        height = h;
        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        drawPath(canvas);
     //x轴滑动速度 scrollBy(
1, 0);
     //非UI线程下刷新布局,因为UI线程不是线程安全的 postInvalidateDelayed(
10); } }

activity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

最重要的就是Path这个类和moveTo()/lineTo()方法

以上是关于新电图的主要内容,如果未能解决你的问题,请参考以下文章

心电图期间无法获取用户的平均心率

心电图期间无法获取用户的平均心率

心电信号基于matlab心电图峰值检测含Matlab源码 1548期

心电信号基于matlab心电图PQRST检测含Matlab源码 1549期

无法从心电图检索数据 - Arduino

android 怎样做心电图