diff --git a/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java b/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java index 5bf351aee5edaa82d0b9652c22799bcd0bf3d609..89f51a6b5176e85343a5dc584da4fcbf10320924 100644 --- a/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java +++ b/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java @@ -1,13 +1,19 @@ package com.example.myhabitat; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; import android.util.Log; -import android.view.Display; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; @@ -19,11 +25,16 @@ import habitat.Piece; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.time.Duration; -public class ModeImmersionActivity extends AppCompatActivity { +public class ModeImmersionActivity extends AppCompatActivity implements SensorEventListener { Habitat habitat; Mur murEnCours; Piece pieceEnCours; + private SensorManager sensorManager; + private ImageView imageViewBoussole; + private float debut = 0f; + private ImageView imageViewMur; @Override protected void onCreate(Bundle savedInstanceState) { @@ -40,6 +51,15 @@ public class ModeImmersionActivity extends AppCompatActivity { } setContentView(R.layout.activity_mode_immersion); + + pieceEnCours = habitat.getPieces().get(0); + affichePiece(pieceEnCours); + imageViewBoussole = findViewById(R.id.imageViewBoussole); + imageViewMur = findViewById(R.id.imageViewMur); + + sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); + + } public boolean onCreateOptionsMenu(Menu menu) { @@ -85,8 +105,6 @@ public class ModeImmersionActivity extends AppCompatActivity { } public void afficheMur(){ - ImageView imageViewMur = findViewById(R.id.imageViewMur); - //On récupère la photo FileInputStream fis = null; try { @@ -122,4 +140,66 @@ public class ModeImmersionActivity extends AppCompatActivity { murEnCours = pieceEnCours.getMurOrientation(Orientation.OUEST); afficheMur(); } + + @Override + public void onSensorChanged(SensorEvent event) { + // On récupère l'angle + float angle = -(Math.round(event.values[0])); + + //On créé l'animation de rotation + RotateAnimation rotateAnimation = new RotateAnimation(debut, angle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + rotateAnimation.setFillAfter(true); + rotateAnimation.setDuration(200); + + //Et on la lance + if(imageViewBoussole == null) { + imageViewBoussole = findViewById(R.id.imageViewBoussole); + } + imageViewBoussole.startAnimation(rotateAnimation); + + + if(angle<(-45) && angle>=(-135)){ + murEnCours = pieceEnCours.getMurOrientation(Orientation.EST); + } else if (angle<(-135) && angle>=(-225)) { + murEnCours = pieceEnCours.getMurOrientation(Orientation.SUD); + } else if (angle<(-225) && angle>=(-315)) { + murEnCours = pieceEnCours.getMurOrientation(Orientation.OUEST); + }else{ + murEnCours = pieceEnCours.getMurOrientation(Orientation.NORD); + } + afficheMur(); + Toast.makeText(getBaseContext(), murEnCours.getOrientation().toString(), Toast.LENGTH_SHORT).show(); + + + //Maj de l'angle de depart + debut = angle; + + Log.i("testRotationBoussole", "rotation = " + angle); + + /* + try { + Thread.sleep(200); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + */ + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + + } + + @Override + protected void onPause() { + sensorManager.unregisterListener(this); + super.onPause(); + } + + @Override + protected void onResume() { + sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); + super.onResume(); + } } \ No newline at end of file diff --git a/app/src/main/java/outils/GestionnaireBoussole.java b/app/src/main/java/outils/GestionnaireBoussole.java new file mode 100644 index 0000000000000000000000000000000000000000..e648a6805a8e8fb48d5edb3bee29f9be52aef5a9 --- /dev/null +++ b/app/src/main/java/outils/GestionnaireBoussole.java @@ -0,0 +1,8 @@ +package outils; + +public class GestionnaireBoussole { + + public GestionnaireBoussole() { + } + +} diff --git a/app/src/main/res/drawable/boussole.png b/app/src/main/res/drawable/boussole.png new file mode 100644 index 0000000000000000000000000000000000000000..555d296613fc4a4402dd394496fedaac5fb1f36d Binary files /dev/null and b/app/src/main/res/drawable/boussole.png differ diff --git a/app/src/main/res/layout/activity_mode_immersion.xml b/app/src/main/res/layout/activity_mode_immersion.xml index 0e8352486d826035b8b0194973521390e2598890..d349f927dea9110690724c1fc3c266985d28b679 100644 --- a/app/src/main/res/layout/activity_mode_immersion.xml +++ b/app/src/main/res/layout/activity_mode_immersion.xml @@ -65,4 +65,12 @@ app:layout_constraintVertical_bias="0.863" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"/> + + <ImageView + android:layout_width="154dp" + android:layout_height="125dp" + app:srcCompat="@drawable/boussole" + android:id="@+id/imageViewBoussole" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file