From ca1a82a9ee7defcd89bf600cee5732c96e4ed993 Mon Sep 17 00:00:00 2001 From: "Loch Christian (uib05376)" Date: Mon, 26 Oct 2020 21:17:40 +0100 Subject: [PATCH] Implement TrackView --- .../java/de/hems/trafficsim/MainActivity.java | 13 +++-- .../main/java/de/hems/trafficsim/Track.java | 12 +++-- .../java/de/hems/trafficsim/TrackView.java | 51 +++++++++++++++++++ .../main/java/de/hems/trafficsim/Vehicle.java | 4 ++ app/src/main/res/layout/activity_main.xml | 1 + 5 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/de/hems/trafficsim/TrackView.java diff --git a/app/src/main/java/de/hems/trafficsim/MainActivity.java b/app/src/main/java/de/hems/trafficsim/MainActivity.java index caf7537..f185b30 100644 --- a/app/src/main/java/de/hems/trafficsim/MainActivity.java +++ b/app/src/main/java/de/hems/trafficsim/MainActivity.java @@ -1,6 +1,7 @@ package de.hems.trafficsim; import androidx.appcompat.app.AppCompatActivity; +import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.view.View; @@ -12,14 +13,17 @@ import java.util.Observer; public class MainActivity extends AppCompatActivity implements Observer { protected Track track; + protected TrackView trackView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - this.track = new Track(20); + this.track = new Track(20, 50); + this.trackView = new TrackView(this, this.track); this.track.addObserver(this); - + ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.constr_layout); + layout.addView(this.trackView); } @Override @@ -35,11 +39,12 @@ public class MainActivity extends AppCompatActivity implements Observer { TextView view = (TextView) findViewById(R.id.debugTextView); view.setText(s); view.invalidate(); + this.trackView.invalidate(); } public void onStepButtonClick (View view) { - for (int j = 0; j < 3000; j++) { + //for (int j = 0; j < 3000; j++) { this.track.timeElapse(50); - } + //} } } \ No newline at end of file diff --git a/app/src/main/java/de/hems/trafficsim/Track.java b/app/src/main/java/de/hems/trafficsim/Track.java index 0255ebf..3b16013 100644 --- a/app/src/main/java/de/hems/trafficsim/Track.java +++ b/app/src/main/java/de/hems/trafficsim/Track.java @@ -6,15 +6,19 @@ import java.util.Observable; public class Track extends Observable { protected List vehicles; - + protected float trackLength; public List getVehicles() { - return vehicles; } - public Track(int numberVehicles) { + public float getTrackLength() { + return trackLength; + } + + public Track(int numberVehicles, float trackLength) { this.vehicles = createVehiclesList(numberVehicles); + this.trackLength = trackLength; } protected List createVehiclesList(int numberVehicles){ @@ -37,7 +41,7 @@ public class Track extends Observable { Vehicle forerunner = vehicles.get(forerunnerIndex); float distanceForerunner = forerunner.getPosition() - v.getPosition() - 1; if(distanceForerunner < 0.0){ - distanceForerunner += 50; + distanceForerunner += this.trackLength; } v.updateVelocity(distanceForerunner); } diff --git a/app/src/main/java/de/hems/trafficsim/TrackView.java b/app/src/main/java/de/hems/trafficsim/TrackView.java new file mode 100644 index 0000000..20aee09 --- /dev/null +++ b/app/src/main/java/de/hems/trafficsim/TrackView.java @@ -0,0 +1,51 @@ +package de.hems.trafficsim; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.view.View; +import android.view.ViewGroup; + +public class TrackView extends View { + protected Paint paint; + protected Track track; + protected int pixelPerVehicle; + + public TrackView(Context context, Track track) { + super(context); + this.track = track; + this.paint = new Paint(); + paint.setColor(Color.BLACK); + paint.setStyle(Paint.Style.FILL_AND_STROKE); + } + + protected int getColor(float curVelocity, float maxVelocity) { + float perc = curVelocity / maxVelocity; + if (perc <= 0.5) { + int red = ((int) (2*perc*0xFF)) << 16; + int green = ((int)0xFF) << 8; + int blue = 0; + return 0xff000000 | red | green | blue; + } else { + int red = ((int)(0xFF)) << 16; + int green = ((int)(0xFF-0xFF*(perc-0.5)*2)) << 8; + int blue = 0; + return 0xff000000 | red | green | blue; + } + } + + @Override + protected void onDraw(Canvas canvas) { + this.pixelPerVehicle = (int) (this.getWidth() / this.track.getTrackLength()); + //super.onDraw(canvas); + int i = 0; + for (Vehicle v : this.track.getVehicles()) { + int left = (int) (this.pixelPerVehicle * v.getPosition()); + this.paint.setColor(getColor(v.getCurVelocity(), v.getMaxVelocity())); + canvas.drawRect(left, 0, left + this.pixelPerVehicle - 1, + 20, this.paint); + i++; + } + } +} diff --git a/app/src/main/java/de/hems/trafficsim/Vehicle.java b/app/src/main/java/de/hems/trafficsim/Vehicle.java index 5e2792d..e80c750 100644 --- a/app/src/main/java/de/hems/trafficsim/Vehicle.java +++ b/app/src/main/java/de/hems/trafficsim/Vehicle.java @@ -27,6 +27,10 @@ public class Vehicle { return curVelocity; } + public float getMaxVelocity() { + return maxVelocity; + } + public void updateVelocity(float distanceForerunner) { Random random = new Random(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5d5c8ca..02df76f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,6 +2,7 @@