Как сделать так, чтобы он выглядел как ЭКГ, как добавить интервал между точками

это для постепенного форматирования и рисования
экг @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);plot = (XYPlot) findViewById(R.id.plot);

          ECGModel ecgSeries = new ECGModel(2000, 200);

    // add a new series' to the xyplot:
    MyFadeFormatter formatter =new MyFadeFormatter(2000);
    formatter.setLegendIconEnabled(false);
    plot.addSeries(ecgSeries, formatter);
    plot.setRangeBoundaries(0, 10, BoundaryMode.FIXED);
    plot.setDomainBoundaries(0, 2000, BoundaryMode.FIXED);

    // reduce the number of range labels
    plot.setLinesPerRangeLabel(2);

    // start generating ecg data in the background:
    ecgSeries.start(new WeakReference<>(plot.getRenderer(AdvancedLineAndPointRenderer.class)));

    // set a redraw rate of 30hz and start immediately:
    redrawer = new Redrawer(plot, 60, true);
 }

 /**
 * Special {@link AdvancedLineAndPointRenderer.Formatter} that draws a line
 * that fades over time.  Designed to be used in conjunction with a circular buffer model.
 */
 public static class MyFadeFormatter extends AdvancedLineAndPointRenderer.Formatter {

    private int trailSize;

    MyFadeFormatter(int trailSize) {
        this.trailSize = trailSize;
    }

    @Override
    public Paint getLinePaint(int thisIndex, int latestIndex, int seriesSize) {
        // offset from the latest index:
        int offset;
        if(thisIndex > latestIndex) {
            offset = latestIndex + (seriesSize - thisIndex);
        } else {
            offset =  latestIndex - thisIndex;
        }

        float scale = 255f / trailSize;
        int alpha = (int) (255 - (offset * scale));
        getLinePaint().setAlpha(alpha > 0 ? alpha : 0);
        return getLinePaint();
    }
 }
 public static class ECGModel implements XYSeries {

    private final Number[] data;
    private final long delayMs;
    private final int blipInteral;
    private final Thread thread;
    private boolean keepRunning;
    private int latestIndex;

    private WeakReference<AdvancedLineAndPointRenderer> rendererRef;

    /**
     *
     * @param size Sample size contained within this model
     * @param updateFreqHz Frequency at which new samples are added to the model
     */
    ECGModel(int size, int updateFreqHz) {
        data = new Number[size];
        for(int i = 0; i < data.length; i++) {
            data[i] = 0;
        }

        // translate hz into delay (ms):
        delayMs = 1000 / updateFreqHz;

        // add 7 "blips" into the signal:
        blipInteral = size / 7;

        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (keepRunning) {
                        if (latestIndex >= data.length) {
                            latestIndex = 0;
                        }

                        // generate some random data:
                        if (latestIndex % blipInteral == 0) {
                            // insert a "blip" to simulate a heartbeat:
                            data[latestIndex] = (Math.random() * 10) + 3;
                        } else {
                            // insert a random sample:
                            data[latestIndex] = 2*Math.random();
                        }

                        if(latestIndex < data.length - 1) {
                            // null out the point immediately following i, to disable
                            // connecting i and i+1 with a line:
                            data[latestIndex +1] = null;
                        }

                        if(rendererRef.get() != null) {
                            rendererRef.get().setLatestIndex(latestIndex);
                            Thread.sleep(delayMs);
                        } else {
                            keepRunning = false;
                        }
                        latestIndex++;
                    }
                } catch (InterruptedException e) {
                    keepRunning = false;
                }
            }
        });
    }

graphfunction void start (final WeakReference rendererRef) {this.rendererRef = rendererRef; keepRunning = true; thread.start (); }

          @Override
    public int size() {
        return data.length;
    }

    @Override
    public Number getX(int index) {
        return index;
    }

    @Override
    public Number getY(int index) {
        return data[index];
    }

    @Override
    public String getTitle() {
        return "Signal";
    }
 }

 @Override
 public void onStop() {
    super.onStop();
    redrawer.finish();
   }
  }

приведенный выше код предназначен для рисования ЭКГ-графа в студии Android. Мне нужно больше интервалов, и я хочу, чтобы это было больше похоже на ЭКГ.

0 ответов

Другие вопросы по тегам