Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.compass;
- import androidx.appcompat.app.AppCompatActivity;
- import android.annotation.SuppressLint;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.os.Bundle;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.view.animation.Animation;
- import android.view.animation.RotateAnimation;
- public class MainActivity extends AppCompatActivity implements SensorEventListener {
- private ImageView iv_dial; //imageview c картинкой компаса
- private TextView tv_degree;
- private float CurrentDegree = 0f; //текущее отклонение в градусах
- private SensorManager sensorManager;
- Sensor accelerometer;
- Sensor magnetometer;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
- accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
- init();
- }
- private void init()
- {
- iv_dial = findViewById(R.id.iv_dial);
- tv_degree = findViewById(R.id.tv_degree);
- sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
- }
- @Override
- protected void onResume() {
- super.onResume();
- sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI);
- sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_UI);
- }
- @Override
- protected void onPause() {
- super.onPause();
- sensorManager.unregisterListener(this);
- }
- @SuppressLint("SetTextI18n")
- @Override
- public void onSensorChanged(SensorEvent event) {
- float degree = Math.round(event.values[0]);
- tv_degree.setText("Degree from North: " + degree + " degrees");
- RotateAnimation ra = new RotateAnimation(CurrentDegree, -degree,
- Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
- ra.setDuration(210);
- ra.setFillAfter(true);
- iv_dial.startAnimation(ra);
- CurrentDegree = -degree;
- }
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement