Advertisement
Baru_Berbagi

MainActivity.java

Jun 20th, 2021
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.26 KB | None | 0 0
  1. package com.baruberbagi.compass;
  2.  
  3. import androidx.appcompat.app.AppCompatActivity;
  4.  
  5. import android.hardware.Sensor;
  6. import android.hardware.SensorEvent;
  7. import android.hardware.SensorEventListener;
  8. import android.hardware.SensorManager;
  9. import android.os.Bundle;
  10. import android.service.autofill.FieldClassification;
  11. import android.view.animation.Animation;
  12. import android.view.animation.RotateAnimation;
  13. import android.widget.ImageView;
  14.  
  15. public class MainActivity extends AppCompatActivity implements SensorEventListener {
  16.  
  17.     private ImageView imageView;
  18.     private float[] gravitasi = new float[3];
  19.     private float[] magnetik = new float[3];
  20.     private float azimut = 0f;
  21.     private float azimutSaatIni = 0f;
  22.     private SensorManager menejerSensor;
  23.  
  24.     @Override
  25.     protected void onCreate(Bundle savedInstanceState) {
  26.         super.onCreate(savedInstanceState);
  27.         setContentView(R.layout.activity_main);
  28.  
  29.         imageView = findViewById(R.id.kompass);
  30.         menejerSensor = (SensorManager)getSystemService(SENSOR_SERVICE);
  31.  
  32.     }
  33.  
  34.     @Override
  35.     protected void onResume() {
  36.         super.onResume();
  37.         menejerSensor.registerListener(this, menejerSensor.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
  38.                 SensorManager.SENSOR_DELAY_GAME);
  39.         menejerSensor.registerListener(this, menejerSensor.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
  40.                 SensorManager.SENSOR_DELAY_GAME);
  41.     }
  42.  
  43.     @Override
  44.     protected void onPause() {
  45.         super.onPause();
  46.         menejerSensor.unregisterListener(this);
  47.     }
  48.  
  49.     @Override
  50.     public void onSensorChanged(SensorEvent event) {
  51.         final float alpha = 0.97f;
  52.         synchronized (this){
  53.             if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
  54.                 gravitasi[0] = alpha*gravitasi[0]+(1-alpha)*event.values[0];
  55.                 gravitasi[1] = alpha*gravitasi[1]+(1-alpha)*event.values[1];
  56.                 gravitasi[2] = alpha*gravitasi[2]+(1-alpha)*event.values[2];
  57.             }
  58.  
  59.             if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
  60.             {
  61.                 magnetik[0] = alpha*magnetik[0]+(1-alpha)*event.values[0];
  62.                 magnetik[1] = alpha*magnetik[1]+(1-alpha)*event.values[1];
  63.                 magnetik[2] = alpha*magnetik[2]+(1-alpha)*event.values[2];
  64.             }
  65.  
  66.             float R[] = new float[9];
  67.             float I[] = new float[9];
  68.             boolean success = SensorManager.getRotationMatrix(R,I,gravitasi,magnetik);
  69.             if (success)
  70.             {
  71.                 float orentasi[] = new float[3];
  72.                 SensorManager.getOrientation(R,orentasi);
  73.                 azimut = (float) Math.toDegrees(orentasi[0]);
  74.                 azimut = (azimut + 360)%360;
  75.  
  76.  
  77.                 Animation animation = new RotateAnimation(-azimutSaatIni,-azimut,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
  78.                 azimutSaatIni = azimut;
  79.  
  80.                 animation.setDuration(500);
  81.                 animation.setRepeatCount(0);
  82.                 animation.setFillAfter(true);
  83.  
  84.                 imageView.startAnimation(animation);
  85.             }
  86.         }
  87.     }
  88.  
  89.     @Override
  90.     public void onAccuracyChanged(Sensor sensor, int accuracy) {
  91.  
  92.     }
  93. }
  94.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement