-
-
Save chaynika/5b972f6635db6a12116f57485785934c to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="utf-8"?> | |
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="wrap_content" | |
android:layout_height="match_parent" | |
tools:context="com.healthmonitor.khann.healthmonitor.MainActivity"> | |
<Button | |
android:id="@+id/run" | |
style="@style/Widget.AppCompat.Button.Borderless" | |
android:layout_width="89dp" | |
android:layout_height="40dp" | |
android:layout_marginLeft="387dp" | |
android:layout_marginStart="387dp" | |
android:layout_marginTop="16dp" | |
android:background="@android:color/holo_green_light" | |
android:text="Run" | |
app:layout_constraintLeft_toLeftOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<Button | |
android:id="@+id/stop" | |
android:layout_width="87dp" | |
android:layout_height="40dp" | |
android:layout_marginTop="16dp" | |
android:background="@android:color/holo_red_light" | |
android:text="Stop" | |
app:layout_constraintTop_toTopOf="parent" | |
app:layout_constraintLeft_toRightOf="@+id/run" | |
android:layout_marginLeft="8dp" /> | |
<com.jjoe64.graphview.GraphView | |
android:id="@+id/graph" | |
android:layout_width="558dp" | |
android:layout_height="204dp" | |
android:layout_marginEnd="8dp" | |
android:layout_marginLeft="16dp" | |
android:layout_marginRight="8dp" | |
android:layout_marginStart="16dp" | |
android:layout_marginTop="67dp" | |
app:layout_constraintHorizontal_bias="0.0" | |
app:layout_constraintLeft_toLeftOf="parent" | |
app:layout_constraintRight_toRightOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<EditText | |
android:id="@+id/editText" | |
android:layout_width="60dp" | |
android:layout_height="42dp" | |
android:ems="10" | |
android:inputType="textPersonName" | |
android:text="P Name" | |
android:textSize="12sp" | |
app:layout_constraintTop_toTopOf="parent" | |
android:layout_marginTop="16dp" | |
app:layout_constraintLeft_toRightOf="@+id/editText5" | |
android:layout_marginLeft="8dp" /> | |
<EditText | |
android:id="@+id/editText2" | |
android:layout_width="45dp" | |
android:layout_height="42dp" | |
android:ems="10" | |
android:inputType="textPersonName" | |
android:text="P ID:" | |
android:textSize="12sp" | |
tools:layout_editor_absoluteX="16dp" | |
app:layout_constraintTop_toTopOf="parent" | |
android:layout_marginTop="16dp" /> | |
<EditText | |
android:id="@+id/editText5" | |
android:layout_width="50dp" | |
android:layout_height="42dp" | |
android:ems="10" | |
android:inputType="number" | |
android:text="Age" | |
android:textSize="12sp" | |
app:layout_constraintLeft_toRightOf="@+id/editText2" | |
android:layout_marginLeft="9dp" | |
app:layout_constraintTop_toTopOf="parent" | |
android:layout_marginTop="16dp" /> | |
<TextView | |
android:id="@+id/textView6" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="Sex:" | |
android:textSize="12sp" | |
app:layout_constraintTop_toTopOf="parent" | |
android:layout_marginTop="34dp" | |
app:layout_constraintLeft_toRightOf="@+id/editText" | |
android:layout_marginLeft="12dp" /> | |
<RadioGroup | |
android:id="@+id/radioSex" | |
android:layout_width="159dp" | |
android:layout_height="57dp" | |
android:layout_marginLeft="12dp" | |
android:layout_marginTop="-1dp" | |
android:checkedButton="@+id/radioButton" | |
android:orientation='horizontal' | |
app:layout_constraintLeft_toRightOf="@+id/editText" | |
app:layout_constraintTop_toTopOf="parent">> | |
<RadioButton | |
android:id="@+id/radioButton" | |
android:layout_width="75dp" | |
android:layout_height="26dp" | |
android:layout_marginLeft="14dp" | |
android:layout_marginTop="30dp" | |
android:scaleX="0.5" | |
android:scaleY="0.5" | |
android:text="Female" | |
android:textSize="12sp" | |
app:layout_constraintLeft_toRightOf="@+id/radioButton2" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<RadioButton | |
android:id="@+id/radioButton2" | |
android:layout_width="64dp" | |
android:layout_height="27dp" | |
android:layout_marginLeft="14dp" | |
android:layout_marginTop="29dp" | |
android:scaleX="0.5" | |
android:scaleY="0.5" | |
android:text="Male" | |
android:textSize="12sp" | |
app:layout_constraintLeft_toRightOf="@+id/editText" | |
app:layout_constraintTop_toTopOf="parent" /> | |
</RadioGroup> | |
</android.support.constraint.ConstraintLayout> |
package com.healthmonitor.khann.healthmonitor; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.view.View; | |
import com.jjoe64.graphview.GraphView; | |
import com.jjoe64.graphview.series.DataPoint; | |
import com.jjoe64.graphview.series.LineGraphSeries; | |
import com.jjoe64.graphview.Viewport; | |
import java.util.Random; | |
import android.widget.Button; | |
import android.view.View.OnClickListener; | |
import android.util.Log; | |
public class MainActivity extends AppCompatActivity implements OnClickListener { | |
// Declare all the private variables for this class | |
private LineGraphSeries mSeries1 = new LineGraphSeries<>(); | |
Random rand = new Random(); | |
int x_value = 0; | |
Button runButton, stopButton; | |
GraphView graphView; | |
boolean firstRun = true; | |
// Reference to implement own Runnable class: | |
// https://www.tutorialspoint.com/java/java_thread_control.htm | |
class RunnableDemo implements Runnable { | |
public Thread thread; | |
public boolean suspended = false; | |
RunnableDemo() { | |
} | |
public void run() { | |
// we add 5000 new entries | |
for (int i = 0; i < 5000; i++) { | |
runOnUiThread(new RunnableDemo() { | |
@Override | |
public void run() { | |
addEntry(); | |
} | |
}); | |
// sleep to slow down the add of entries | |
try { | |
Thread.sleep(500); | |
synchronized (this) { | |
while (suspended) { | |
wait(); | |
} | |
} | |
} catch (InterruptedException e) { | |
// manage error ... | |
} | |
} | |
} | |
void start () { | |
if (thread == null) { | |
thread = new Thread (this); | |
thread.start (); | |
} | |
} | |
void suspend() { | |
suspended = true; | |
} | |
synchronized void resume() { | |
suspended = false; | |
notify(); | |
} | |
} | |
RunnableDemo R1 = new RunnableDemo(); | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
// All initializations should go here | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
runButton = (Button) findViewById(R.id.run); | |
runButton.setOnClickListener(this); | |
stopButton = (Button) findViewById(R.id.stop); | |
stopButton.setOnClickListener(this); | |
graphView = (GraphView) findViewById(R.id.graph); | |
Viewport viewport = graphView.getViewport(); | |
viewport.setYAxisBoundsManual(true); | |
viewport.setMinY(0); | |
viewport.setMaxY(2000); | |
viewport.setScrollable(true); | |
viewport.setBackgroundColor(-16777216); | |
viewport.setDrawBorder(true); | |
viewport.setXAxisBoundsManual(true); | |
viewport.setMinX(0); | |
viewport.setMaxX(40); | |
viewport.setScalable(true); | |
} | |
@Override | |
public void onClick(View view) { | |
switch (view.getId()) { | |
case R.id.run: | |
Log.d("MR.bool", "Run was clicked "); | |
runButton.setEnabled(false); | |
stopButton.setEnabled(true); | |
graphView.addSeries(mSeries1); | |
if (firstRun) { | |
R1.start(); | |
} else { | |
R1.resume(); | |
} | |
break; | |
case R.id.stop: | |
// TODO Need to write function for stop by adding wait() to the thread | |
Log.d("MR.bool", "Stop was clicked "); | |
GraphView graph = (GraphView) findViewById(R.id.graph); | |
graph.removeAllSeries(); | |
runButton.setEnabled(true); | |
stopButton.setEnabled(false); | |
firstRun = false; | |
R1.suspend(); | |
break; | |
} | |
} | |
private void addEntry() { | |
float y = rand.nextFloat() * (2000 - 20) + 20; | |
mSeries1.appendData(new DataPoint(x_value, y), true, 500); | |
x_value += 1; | |
} | |
} |
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.healthmonitor.khann.healthmonitor.MainActivity">
<com.jjoe64.graphview.GraphView
android:id="@+id/graph"
android:layout_width="match_parent"
android:layout_height="204dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:layout_marginTop="65dp"
app:layout_constraintHorizontal_bias="0.265"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/run"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="78dp"
android:layout_height="36dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="16dp"
android:background="@android:color/holo_green_light"
android:text="Run"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="10dp"
tools:layout_editor_absoluteY="26dp" />
<Button
android:id="@+id/stop"
android:layout_width="84dp"
android:layout_height="36dp"
android:layout_marginLeft="27dp"
android:layout_marginTop="16dp"
android:background="@android:color/holo_red_light"
android:text="Stop"
app:layout_constraintLeft_toRightOf="@+id/run"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Copy paste the above file in activity_main.xml
package com.healthmonitor.khann.healthmonitor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
import com.jjoe64.graphview.Viewport;
import java.util.Random;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.util.Log;
public class MainActivity extends AppCompatActivity implements OnClickListener {
// Declare all the private variables for this class
private LineGraphSeries mSeries1 = new LineGraphSeries<>();
Random rand = new Random();
int x_value=0;
Thread thread = new Thread();
@Override
protected void onCreate(Bundle savedInstanceState) {
// All initializations should go here
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button runButton = (Button) findViewById(R.id.run);
runButton.setOnClickListener(this);
Button stopButton = (Button) findViewById(R.id.stop);
stopButton.setOnClickListener(this);
GraphView graphView = (GraphView) findViewById(R.id.graph);
graphView.addSeries(mSeries1);
Viewport viewport = graphView.getViewport();
viewport.setBackgroundColor(-16777216);
viewport.setDrawBorder(true);
viewport.setXAxisBoundsManual(true);
viewport.setYAxisBoundsManual(true);
viewport.setMinX(0);
viewport.setMaxX(400);
viewport.setMinY(0);
viewport.setMaxY(2000);
viewport.setScrollable(true);
viewport.setScalable(true);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.run:
thread = new Thread(new Runnable() {
@Override
public void run() {
// we add 100 new entries
for (int i = 0; i < 5000; i++) {
runOnUiThread(new Runnable() {
@Override
public void run() {
addEntry();
}
});
// sleep to slow down the add of entries
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// manage error ...
}
}
}
});
thread.start();
case R.id.stop:
// TODO Need to write function for stop by adding wait() to the thread
Log.d("MR.bool", "Stop was clicked ");
/* Following is NOT the correct way to implement stop.
GraphView graph = (GraphView) findViewById(R.id.graph);
//graph.removeAllSeries();
*/
}
}
private void addEntry() {
float y = rand.nextFloat()* (2000 - 20) + 20;
mSeries1.appendData(new DataPoint(x_value, y), true, 500);
x_value+=1;
}
}
Above file is updated view file. Keep the number of data points added to series greater than the number of data points desired to view.
There is an issue with RUNbutton, multiple clicks are making the activity run faster (Try n see).
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:context="com.healthmonitor.khann.healthmonitor.MainActivity">
<Button
android:id="@+id/run"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="89dp"
android:layout_height="40dp"
android:layout_marginLeft="387dp"
android:layout_marginStart="387dp"
android:layout_marginTop="16dp"
android:background="@android:color/holo_green_light"
android:text="Run"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/stop"
android:layout_width="87dp"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:background="@android:color/holo_red_light"
android:text="Stop"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@+id/run"
android:layout_marginLeft="8dp" />
<com.jjoe64.graphview.GraphView
android:id="@+id/graph"
android:layout_width="558dp"
android:layout_height="204dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:layout_marginStart="16dp"
android:layout_marginTop="67dp"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText"
android:layout_width="60dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="textPersonName"
android:text="P Name"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toRightOf="@+id/editText5"
android:layout_marginLeft="8dp" />
<EditText
android:id="@+id/editText2"
android:layout_width="45dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="textPersonName"
android:text="P ID:"
android:textSize="12sp"
tools:layout_editor_absoluteX="16dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" />
<EditText
android:id="@+id/editText5"
android:layout_width="50dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="number"
android:text="Age"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/editText2"
android:layout_marginLeft="9dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sex:"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="34dp"
app:layout_constraintLeft_toRightOf="@+id/editText"
android:layout_marginLeft="12dp" />
<RadioGroup
android:id="@+id/radioSex"
android:layout_width="159dp"
android:layout_height="57dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="-1dp"
android:checkedButton="@+id/radioButton"
android:orientation='horizontal'
app:layout_constraintLeft_toRightOf="@+id/editText"
app:layout_constraintTop_toTopOf="parent">>
<RadioButton
android:id="@+id/radioButton"
android:layout_width="75dp"
android:layout_height="26dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="30dp"
android:scaleX="0.5"
android:scaleY="0.5"
android:text="Female"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/radioButton2"
app:layout_constraintTop_toTopOf="parent" />
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="64dp"
android:layout_height="27dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="29dp"
android:scaleX="0.5"
android:scaleY="0.5"
android:text="Male"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/editText"
app:layout_constraintTop_toTopOf="parent" />
</RadioGroup>
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:context="com.healthmonitor.khann.healthmonitor.MainActivity">
<Button
android:id="@+id/run"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="89dp"
android:layout_height="40dp"
android:layout_marginLeft="387dp"
android:layout_marginStart="387dp"
android:layout_marginTop="16dp"
android:background="@android:color/holo_green_light"
android:text="Run"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/stop"
android:layout_width="87dp"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:background="@android:color/holo_red_light"
android:text="Stop"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@+id/run"
android:layout_marginLeft="8dp" />
<com.jjoe64.graphview.GraphView
android:id="@+id/graph"
android:layout_width="558dp"
android:layout_height="204dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:layout_marginStart="16dp"
android:layout_marginTop="67dp"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText"
android:layout_width="60dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="P Name"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toRightOf="@+id/editText5"
android:layout_marginLeft="8dp" />
<EditText
android:id="@+id/editText2"
android:layout_width="45dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="P ID:"
android:textSize="12sp"
tools:layout_editor_absoluteX="16dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" />
<EditText
android:id="@+id/editText5"
android:layout_width="50dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="number"
android:hint="Age"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/editText2"
android:layout_marginLeft="9dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sex:"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="34dp"
app:layout_constraintLeft_toRightOf="@+id/editText"
android:layout_marginLeft="12dp" />
<RadioGroup
android:id="@+id/radioSex"
android:layout_width="159dp"
android:layout_height="57dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="-1dp"
android:checkedButton="@+id/radioButton"
android:orientation='horizontal'
app:layout_constraintLeft_toRightOf="@+id/editText"
app:layout_constraintTop_toTopOf="parent">>
<RadioButton
android:id="@+id/radioButton"
android:layout_width="75dp"
android:layout_height="26dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="30dp"
android:scaleX="0.5"
android:scaleY="0.5"
android:text="Female"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/radioButton2"
app:layout_constraintTop_toTopOf="parent" />
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="64dp"
android:layout_height="27dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="29dp"
android:scaleX="0.5"
android:scaleY="0.5"
android:text="Male"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/editText"
app:layout_constraintTop_toTopOf="parent" />
</RadioGroup>
</android.support.constraint.ConstraintLayout>
Minor change in xml
package com.healthmonitor.khann.healthmonitor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
import com.jjoe64.graphview.Viewport;
import java.util.Random;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.util.Log;
public class MainActivity extends AppCompatActivity implements OnClickListener {
// Declare all the private variables for this class
private LineGraphSeries mSeries1 = new LineGraphSeries<>();
Random rand = new Random();
int x_value = 0;
//Thread thread = new Thread();
Button runButton, stopButton;
GraphView graphView;
boolean firstRun = true;
//Handler handler;
//boolean suspended = false;
class RunnableDemo implements Runnable {
public Thread thread;
//private String threadName;
public boolean suspended = false;
RunnableDemo() {
//threadName = name;
//System.out.println("Creating " + threadName );
}
public void run() {
// while (true) {
//
// synchronized (this) {
// while (suspended) {
// try {
// wait();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
//
// runOnUiThread(new Runnable() {
// @OverRide
// public void run() {
// addEntry();
// }
// });
// try {
// Thread.sleep(500);
// } catch (InterruptedException e) {
//
// }
// }
// }
// }
//System.out.println("Running " + threadName );
// we add 100 new entries
for (int i = 0; i < 5000; i++) {
runOnUiThread(new RunnableDemo() {
@OverRide
public void run() {
addEntry();
}
});
// sleep to slow down the add of entries
try {
Thread.sleep(500);
synchronized (this) {
while (suspended) {
wait();
}
}
} catch (InterruptedException e) {
// manage error ...
}
}
}
void start () {
if (thread == null) {
thread = new Thread (this);
thread.start ();
}
}
void suspend() {
System.out.print("Suspending the thread");
suspended = true;
}
synchronized void resume() {
System.out.print("Resuming the thread");
suspended = false;
notify();
}
}
RunnableDemo R1 = new RunnableDemo();
@Override
protected void onCreate(Bundle savedInstanceState) {
// All initializations should go here
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runButton = (Button) findViewById(R.id.run);
runButton.setOnClickListener(this);
stopButton = (Button) findViewById(R.id.stop);
stopButton.setOnClickListener(this);
graphView = (GraphView) findViewById(R.id.graph);
Viewport viewport = graphView.getViewport();
viewport.setYAxisBoundsManual(true);
viewport.setMinY(0);
viewport.setMaxY(2000);
viewport.setScrollable(true);
viewport.setBackgroundColor(-16777216);
viewport.setDrawBorder(true);
viewport.setXAxisBoundsManual(true);
viewport.setMinX(0);
viewport.setMaxX(40);
viewport.setScalable(true);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.run:
Log.d("MR.bool", "Run was clicked ");
runButton.setEnabled(false);
stopButton.setEnabled(true);
graphView.addSeries(mSeries1);
if (firstRun) {
R1.start();
} else {
R1.resume();
// try {
// R1.thread.join();
// } catch (InterruptedException e) {
// //pass
// }
}
// if (firstRun) {
// firstRun = false;
// thread = new Thread(new Runnable() {
// @OverRide
// public void run() {
// // we add 100 new entries
// for (int i = 0; i < 5000; i++) {
// runOnUiThread(new Runnable() {
// @OverRide
// public void run() {
// addEntry();
// }
// });
//
// // sleep to slow down the add of entries
// try {
// Thread.sleep(500);
// synchronized (this) {
// while (suspended) {
// System.out.println("suspended");
// }
// }
// } catch (InterruptedException e) {
// // manage error ...
// }
// }
// }
// });
// thread.start();
break;
case R.id.stop:
// TODO Need to write function for stop by adding wait() to the thread
Log.d("MR.bool", "Stop was clicked ");
GraphView graph = (GraphView) findViewById(R.id.graph);
graph.removeAllSeries();
runButton.setEnabled(true);
stopButton.setEnabled(false);
firstRun = false;
R1.suspend();
break;
}
}
// synchronized void suspend() {
// suspended = true;
// }
//
// synchronized void resume() {
// suspended = false;
// notify();
// }
private void addEntry() {
float y = rand.nextFloat() * (2000 - 20) + 20;
mSeries1.appendData(new DataPoint(x_value, y), true, 500);
x_value += 1;
}
}
`package com.healthmonitor.khann.healthmonitor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
import com.jjoe64.graphview.Viewport;
import java.util.Random;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.util.Log;
// Wherever not marked as reference, is our code.
public class MainActivity extends AppCompatActivity implements OnClickListener {
// Declare all the private variables for this class
private LineGraphSeries mSeries1 = new LineGraphSeries<>();
Random rand = new Random();
int x_value = 0;
Button runButton, stopButton;
GraphView graphView;
boolean firstRun = true;
// Reference to implement own Runnable class:
// https://www.tutorialspoint.com/java/java_thread_control.htm
class RunnableDemo implements Runnable {
public Thread thread;
public boolean suspended = false;
public void run() {
// we add 5000 new entries
for (int i = 0; i < 5000; i++) {
runOnUiThread(new RunnableDemo() {
@Override
public void run() {
addEntry();
}
});
// sleep to slow down the add of entries
try {
Thread.sleep(500);
synchronized (this) {
while (suspended) {
wait();
}
}
} catch (InterruptedException e) {
System.out.println("Exception caught: " + e);
}
}
}
void start () {
if (thread == null) {
thread = new Thread (this);
thread.start ();
}
}
void suspend() {
suspended = true;
}
synchronized void resume() {
suspended = false;
notify();
}
}
RunnableDemo R1 = new RunnableDemo();
@Override
protected void onCreate(Bundle savedInstanceState) {
// All initializations should go here
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runButton = (Button) findViewById(R.id.run);
runButton.setOnClickListener(this);
stopButton = (Button) findViewById(R.id.stop);
stopButton.setOnClickListener(this);
graphView = (GraphView) findViewById(R.id.graph);
Viewport viewport = graphView.getViewport();
viewport.setYAxisBoundsManual(true);
viewport.setMinY(0);
viewport.setMaxY(2000);
viewport.setScrollable(true);
viewport.setBackgroundColor(-16777216);
viewport.setDrawBorder(true);
viewport.setXAxisBoundsManual(true);
viewport.setMinX(0);
viewport.setMaxX(40);
viewport.setScalable(true);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.run:
// Triggered when run is clicked
Log.d("MR.bool", "Run was clicked ");
// runButton.setEnabled(false);
// stopButton.setEnabled(true);
graphView.addSeries(mSeries1);
if (firstRun) {
R1.start();
} else {
R1.resume();
}
break;
case R.id.stop:
//Triggered when stop is clicked
Log.d("MR.bool", "Stop was clicked ");
GraphView graph = (GraphView) findViewById(R.id.graph);
graph.removeAllSeries();
//runButton.setEnabled(true);
// stopButton.setEnabled(false);
firstRun = false;
R1.suspend();
break;
}
}
// Appends series objects to list after sleep in thread.
// http://www.ssaurel.com/blog/create-a-real-time-line-graph-in-android-with-graphview/
private void addEntry() {
float y = rand.nextFloat() * (2000 - 20) + 20;
mSeries1.appendData(new DataPoint(x_value, y), true, 500);
x_value += 1;
}
}`
package com.healthmonitor.khann.healthmonitor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
import com.jjoe64.graphview.Viewport;
import java.util.Random;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.util.Log;
// Wherever not marked as reference, is our code.
public class MainActivity extends AppCompatActivity implements OnClickListener {
// Declare all the private variables for this class
private LineGraphSeries mSeries1 = new LineGraphSeries<>();
Random rand = new Random();
int x_value = 0;
Button runButton, stopButton;
GraphView graphView;
boolean firstRun = true;
// Reference to implement own Runnable class:
// https://www.tutorialspoint.com/java/java_thread_control.htm
class RunnableDemo implements Runnable {
public Thread thread;
public boolean suspended = false;
public void run() {
// we add 5000 new entries
for (int i = 0; i < 5000; i++) {
runOnUiThread(new RunnableDemo() {
@Override
public void run() {
addEntry();
}
});
// sleep to slow down the add of entries
try {
Thread.sleep(500);
synchronized (this) {
while (suspended) {
wait();
}
}
} catch (InterruptedException e) {
System.out.println("Exception caught: " + e);
}
}
}
void start () {
if (thread == null) {
thread = new Thread (this);
thread.start ();
}
}
void suspend() {
suspended = true;
}
synchronized void resume() {
suspended = false;
notify();
}
}
RunnableDemo R1 = new RunnableDemo();
@Override
protected void onCreate(Bundle savedInstanceState) {
// All initializations should go here
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runButton = (Button) findViewById(R.id.run);
runButton.setOnClickListener(this);
stopButton = (Button) findViewById(R.id.stop);
stopButton.setOnClickListener(this);
graphView = (GraphView) findViewById(R.id.graph);
Viewport viewport = graphView.getViewport();
viewport.setYAxisBoundsManual(true);
viewport.setMinY(0);
viewport.setMaxY(2000);
viewport.setScrollable(true);
viewport.setBackgroundColor(-16777216);
viewport.setDrawBorder(true);
viewport.setXAxisBoundsManual(true);
viewport.setMinX(0);
viewport.setMaxX(40);
viewport.setScalable(true);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.run:
// Triggered when run is clicked
Log.d("MR.bool", "Run was clicked ");
// runButton.setEnabled(false);
// stopButton.setEnabled(true);
graphView.addSeries(mSeries1);
if (firstRun) {
R1.start();
} else {
R1.resume();
}
break;
case R.id.stop:
//Triggered when stop is clicked
Log.d("MR.bool", "Stop was clicked ");
GraphView graph = (GraphView) findViewById(R.id.graph);
graph.removeAllSeries();
//runButton.setEnabled(true);
// stopButton.setEnabled(false);
firstRun = false;
R1.suspend();
break;
}
}
// Appends series objects to list after sleep in thread.
// http://www.ssaurel.com/blog/create-a-real-time-line-graph-in-android-with-graphview/
private void addEntry() {
float y = rand.nextFloat() * (2000 - 20) + 20;
mSeries1.appendData(new DataPoint(x_value, y), true, 500);
x_value += 1;
}
}
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:context="com.healthmonitor.khann.healthmonitor.MainActivity">
<Button
android:id="@+id/run"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="114dp"
android:layout_height="57dp"
android:background="@android:color/holo_green_light"
android:text="Run"
android:layout_marginLeft="61dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="76dp" />
<Button
android:id="@+id/stop"
android:layout_width="114dp"
android:layout_height="57dp"
android:background="@android:color/holo_red_light"
android:text="Stop"
app:layout_constraintLeft_toRightOf="@+id/run"
android:layout_marginLeft="13dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="76dp" />
<com.jjoe64.graphview.GraphView
android:id="@+id/graph"
android:layout_width="327dp"
android:layout_height="328dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:layout_marginStart="16dp"
android:layout_marginTop="158dp"
app:layout_constraintHorizontal_bias="0.166"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText"
android:layout_width="60dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="P Name"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toRightOf="@+id/editText5"
android:layout_marginLeft="8dp" />
<EditText
android:id="@+id/editText2"
android:layout_width="45dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="P ID:"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent" />
<EditText
android:id="@+id/editText5"
android:layout_width="50dp"
android:layout_height="42dp"
android:ems="10"
android:inputType="number"
android:hint="Age"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/editText2"
android:layout_marginLeft="17dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sex:"
android:textSize="12sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="34dp"
app:layout_constraintLeft_toRightOf="@+id/editText"
android:layout_marginLeft="12dp" />
<RadioGroup
android:id="@+id/radioSex"
android:layout_width="159dp"
android:layout_height="57dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="-1dp"
android:checkedButton="@+id/radioButton"
android:orientation='horizontal'
app:layout_constraintLeft_toRightOf="@+id/editText"
app:layout_constraintTop_toTopOf="parent">>
<RadioButton
android:id="@+id/radioButton"
android:layout_width="75dp"
android:layout_height="26dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="30dp"
android:scaleX="0.5"
android:scaleY="0.5"
android:text="Female"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/radioButton2"
app:layout_constraintTop_toTopOf="parent" />
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="64dp"
android:layout_height="27dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="29dp"
android:scaleX="0.5"
android:scaleY="0.5"
android:text="Male"
android:textSize="12sp"
app:layout_constraintLeft_toRightOf="@+id/editText"
app:layout_constraintTop_toTopOf="parent" />
</RadioGroup>
</android.support.constraint.ConstraintLayout>
Go to activity_main.xml and then change button names to "run" and "stop"