diff --git a/app/src/main/java/de/hems/trafficsim/MainActivity.java b/app/src/main/java/de/hems/trafficsim/MainActivity.java index 5635b95..465ffb7 100644 --- a/app/src/main/java/de/hems/trafficsim/MainActivity.java +++ b/app/src/main/java/de/hems/trafficsim/MainActivity.java @@ -6,48 +6,46 @@ import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.view.View; import android.widget.Button; +import android.widget.LinearLayout; import android.widget.TextView; +import java.util.List; import java.util.Observable; import java.util.Observer; public class MainActivity extends AppCompatActivity implements Observer { protected Track track; - protected TrackView trackView; + protected TimeRecordView trackView; protected Worker worker; + protected LinearLayout viewStack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - this.track = new Track(20, 100); - this.trackView = new TrackView(this, this.track); + this.track = new Track(40, 200); this.track.addObserver(this); - ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.constr_layout); - layout.addView(this.trackView); + this.viewStack = (LinearLayout) findViewById(R.id.trackViewStack); + } @Override public void update(Observable observable, Object o) { final Track trackRef = this.track; - final TrackView viewRef = this.trackView; + //final TimeRecordView viewRef = this.trackView; + final LinearLayout viewStackRef = this.viewStack; + final List newRecords = (List) o; + final MainActivity mainActivity = this; runOnUiThread(new Runnable() { @Override public void run() { - String s = ""; - for (Vehicle v: trackRef.getVehicles()){ - s+= "Vehicle " + v.id + " | " - + "Pos = " + v.getPosition() + " | " - + "Vel = " + v.getCurVelocity()+ " | " - + "\n"; - ; + TimeRecordView newTrView = new TimeRecordView(mainActivity, newRecords, trackRef.getTrackLength()); + viewStackRef.addView(newTrView, 0); + int childCount = viewStackRef.getChildCount(); + if (childCount > 30) { + viewStackRef.removeViewAt(childCount-1); } - s += "Average: " + trackRef.getLastAvg(); - TextView view = (TextView) findViewById(R.id.debugTextView); - view.setText(s); - view.invalidate(); - viewRef.invalidate(); } }); diff --git a/app/src/main/java/de/hems/trafficsim/TrackView.java b/app/src/main/java/de/hems/trafficsim/TimeRecordView.java similarity index 58% rename from app/src/main/java/de/hems/trafficsim/TrackView.java rename to app/src/main/java/de/hems/trafficsim/TimeRecordView.java index 20aee09..9ef74ef 100644 --- a/app/src/main/java/de/hems/trafficsim/TrackView.java +++ b/app/src/main/java/de/hems/trafficsim/TimeRecordView.java @@ -7,14 +7,18 @@ import android.graphics.Paint; import android.view.View; import android.view.ViewGroup; -public class TrackView extends View { +import java.util.List; + +public class TimeRecordView extends View { protected Paint paint; - protected Track track; + protected List records; protected int pixelPerVehicle; + protected float trackLength; - public TrackView(Context context, Track track) { + public TimeRecordView(Context context, List records, float trackLength) { super(context); - this.track = track; + this.records = records; + this.trackLength = trackLength; this.paint = new Paint(); paint.setColor(Color.BLACK); paint.setStyle(Paint.Style.FILL_AND_STROKE); @@ -22,6 +26,7 @@ public class TrackView extends View { protected int getColor(float curVelocity, float maxVelocity) { float perc = curVelocity / maxVelocity; + perc = 1 - perc; if (perc <= 0.5) { int red = ((int) (2*perc*0xFF)) << 16; int green = ((int)0xFF) << 8; @@ -35,14 +40,24 @@ public class TrackView extends View { } } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, 20); + setMeasuredDimension(widthMeasureSpec, 20); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + } + @Override protected void onDraw(Canvas canvas) { - this.pixelPerVehicle = (int) (this.getWidth() / this.track.getTrackLength()); - //super.onDraw(canvas); + this.pixelPerVehicle = (int) (this.getWidth() / this.trackLength); int i = 0; - for (Vehicle v : this.track.getVehicles()) { - int left = (int) (this.pixelPerVehicle * v.getPosition()); - this.paint.setColor(getColor(v.getCurVelocity(), v.getMaxVelocity())); + for (VehicleTimeRecord r : this.records) { + int left = (int) (this.pixelPerVehicle * r.getPosition()); + this.paint.setColor(getColor(r.getVelocity(), r.getMaxVelocity())); canvas.drawRect(left, 0, left + this.pixelPerVehicle - 1, 20, this.paint); i++; diff --git a/app/src/main/java/de/hems/trafficsim/Track.java b/app/src/main/java/de/hems/trafficsim/Track.java index b4f85eb..9e3b4b7 100644 --- a/app/src/main/java/de/hems/trafficsim/Track.java +++ b/app/src/main/java/de/hems/trafficsim/Track.java @@ -7,6 +7,11 @@ import java.util.Observable; public class Track extends Observable { protected List vehicles; + + public List> getVtrList() { + return vtrList; + } + protected List> vtrList; protected float trackLength; protected float sumAvgMemory; @@ -36,7 +41,7 @@ public class Track extends Observable { protected List createVehiclesList(int numberVehicles){ List result = new ArrayList<>(); for(int i=0;i + +