android 模拟心电图类似图表

来源:互联网 发布:java工程师的工作描述 编辑:程序博客网 时间:2024/04/19 18:12

直接上代码:


MainActivity.java:


package haha.test.paint.droidpaint_heartcurve;import java.util.Timer;import java.util.TimerTask;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.app.Activity;public class MainActivity extends Activity {public static final String TAG = "TAG_droidpaint_heartcurve.MainActivity";public static final boolean DEBUG = true;public static void myLog(String str) {if (DEBUG) {Log.d(TAG, str);}}public static void myLogE(String str) {if (DEBUG) {Log.e(TAG, str);}}SampleView m_sv = null;MyTask mytask = null;private class MyTask extends AsyncTask<String, Integer, String> {// onPreExecute方法用于在执行后台任务前做一些UI操作@Overrideprotected void onPreExecute() {Log.i(TAG, "onPreExecute() called");}// doInBackground方法内部执行后台任务,不可在此方法内修改UI@Overrideprotected String doInBackground(String... params) {Log.i(TAG, "doInBackground(Params... params) called");try {while (true) {Thread.sleep(1000);publishProgress(0);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}// onProgressUpdate方法用于更新进度信息@Overrideprotected void onProgressUpdate(Integer... progresses) {Log.i(TAG, "onProgressUpdate(Progress... progresses) called");m_sv.append_data(m_sv.lines / 4);}// onPostExecute方法用于在执行完后台任务后更新UI,显示结果@Overrideprotected void onPostExecute(String result) {Log.i(TAG, "onPostExecute(Result result) called");}// onCancelled方法用于在取消执行中的任务时更改UI@Overrideprotected void onCancelled() {Log.i(TAG, "onCancelled() called");}}void start_timer() {myLog("start_timer()");mytask = new MyTask();mytask.execute("haha task");}@Overrideprotected void onCreate(Bundle savedInstanceState) {myLog("onCreate()");super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);preprare_xml();start_timer();}void preprare_xml() {myLog("preprare_xml()");m_sv = (SampleView) findViewById(R.id.sv_test);m_sv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {myLog("m_sv clicked");// TODO Auto-generated method stubm_sv.append_data(m_sv.lines / 4);m_sv.invalidate();}});}}


SampleView.java:


package haha.test.paint.droidpaint_heartcurve;import java.util.Random;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.View;public class SampleView extends View {public static final String TAG = "TAG_droidpaint_heartcurve.SampleView";public static final boolean DEBUG = true;public static void myLog(String str) {if (DEBUG) {Log.d(TAG, str);}}public static void myLogE(String str) {if (DEBUG) {Log.e(TAG, str);}}private Paint mPaint = new Paint();private float[] mPts;private static final int X0 = 100;private static final int Y0 = 1000;private static final int RD_MAX = Y0 / 2;final int lines = 200;static final int gap = 1;// 至少为1final int DIV = lines / 2;Random rd = new Random();/* * count 移动列数 */public void updatePoints(int count) {myLog("updatePoints():count=" + count);int r = rd.nextInt(RD_MAX) + 1;int update_lines = Math.abs(lines - count);myLog("updatePoints():update_lines=" + update_lines);int j = 0;for (int i = 0; i < update_lines * 4;) {mPts[i + 0] = X0 + j;mPts[i + 1] = Y0;// 不变// 终点:mPts[i + 2] = X0 + j;mPts[i + 3] = mPts[i + 3 + count * 4];i = i + 4;j = j + gap;// 向右递增}for (int i = update_lines * 4; i < lines * 4;) {// 起点:mPts[i + 0] = X0 + j;mPts[i + 1] = Y0;// 不变// 终点:mPts[i + 2] = X0 + j;mPts[i + 3] = Y0 - r;//i = i + 4;j = j + gap;// 向右递增if (i % (DIV) == 0) {r = rd.nextInt(RD_MAX) + RD_MAX / 10;}}}public void buildPoints() {myLog("buildPoints()");mPts = new float[lines * 4];int j = 0;int r = rd.nextInt(RD_MAX) + 1;for (int i = 0; i < lines * 4;) {// 起点:mPts[i + 0] = X0 + j;mPts[i + 1] = Y0;// 不变// 终点:mPts[i + 2] = X0 + j;mPts[i + 3] = Y0 - r;//i = i + 4;j = j + gap;// 向右递增if (i % (DIV) == 0) {r = rd.nextInt(RD_MAX) + RD_MAX / 10;}}}/* * count 移动列数 */public void append_data(int count) {myLog("append_data():count=" + count);updatePoints(count);invalidate();}public SampleView(Context context) {super(context);myLog("SampleView()");buildPoints();}public SampleView(Context context, AttributeSet attrs) {// TODO Auto-generated constructor stubsuper(context, attrs);myLog("SampleView(,)");buildPoints();}@Overrideprotected void onDraw(Canvas canvas) {myLog("onDraw()");Paint paint = mPaint;canvas.translate(10, 10);canvas.drawColor(Color.WHITE);paint.setColor(Color.RED);paint.setStrokeWidth(0);canvas.drawLines(mPts, paint);}}

activity_main.xml:

<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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <haha.test.paint.droidpaint_heartcurve.SampleView        android:id="@+id/sv_test"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        />    </RelativeLayout>



0 0