Hi ... Dear All ..Today I am uploading a superb example to draw Compass using Position Sensor and Accelerometer.
Please check.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.
***** check on physical device
*** No layout xml file we use canvas to draw
A. Java File MainActivity.java
Please check.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.
***** check on physical device
*** No layout xml file we use canvas to draw
A. Java File MainActivity.java
package com.exam.ravi.sensorex2; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; public class MainActivity extends AppCompatActivity implements SensorEventListener { Float drawValue; public class CustomDrawableView extends View { Paint paint = new Paint(); public CustomDrawableView(Context context) { super(context); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(4); paint.setAntiAlias(true); }; protected void onDraw(Canvas canvas) { int width = getWidth(); int height = getHeight(); int centerx = width/2; int centery = height/2; canvas.drawLine(centerx, 0, centerx, height, paint); canvas.drawLine(0, centery, width, centery, paint); if (drawValue != null) canvas.rotate(-drawValue*360/(2*3.14159f), centerx, centery); paint.setColor(Color.GREEN); canvas.drawLine(centerx, -1000, centerx, +1000, paint); canvas.drawLine(-1000, centery, 1000, centery, paint); canvas.drawText("N", centerx+5, centery-10, paint); canvas.drawText("S", centerx-10, centery+15, paint); paint.setColor(Color.RED); } } CustomDrawableView drawableView; private SensorManager manager; Sensor accelerometer; Sensor magnetometer; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); drawableView = new CustomDrawableView(this); setContentView(drawableView); // Register the sensor listenersmanager = (SensorManager)getSystemService(SENSOR_SERVICE); accelerometer = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); magnetometer = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); } protected void onResume() { super.onResume(); manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI); manager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_UI); } protected void onPause() { super.onPause(); manager.unregisterListener(this); } public void onAccuracyChanged(Sensor sensor, int accuracy) { } float[] myGravity; float[] myGeomagnetic; public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) myGravity = event.values; if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) myGeomagnetic = event.values; if (myGravity != null && myGeomagnetic != null) { float R[] = new float[9]; float I[] = new float[9]; boolean success = SensorManager.getRotationMatrix(R, I,myGravity, myGeomagnetic); if (success) { float orientation[] = new float[3]; SensorManager.getOrientation(R, orientation); drawValue = orientation[0]; } } drawableView.invalidate(); } }
No comments:
Post a Comment