D
DiscoveR
Neues Mitglied
- 0
Hallo Leute,
stecke gerade ein bisschen fest mit meiner App! Funktion soll sein das ein Kompass (ausgehend von der aktuellen Position) sich nach einem Ziel ausrichtet bzw. eben die Nadel auf das Zeil zeigt. Es ist kein Kompass mit Himmelsrichtungen sondern ohne (sodass ich den Kompass selbst nicht drehen muss) aber ich will die Nadel auf das Ziel ausrichten.
Einen normalen kompass hab ich schon hinbekommen(der sich auch aktiv mitdreht) aber eben nicht die ausrichtung auf das Ziel.
Die Daten des Ziels sind Location-Objekte welches latitude und longitude besitzt. Kann mir jemand helfen.
Danke für eure Hilfe!
Anbei der Code:
// Aus Klasse DiscoveR wird statische Variable test durch folgender aufruf //verwendet: test = currentLocation.bearingTo(targetLocation)
// currentLocation ist aktuelle position und targetLocation das Ziel
package de.medieninformatik.discover;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Location;
import android.os.Bundle;
import android.widget.ImageView;
public class Compass extends Activity implements SensorEventListener{
SensorManager sensorManager;
Sensor sensor;
ImageView needleView;
Bitmap compassBitMap;
Bitmap needleBitMap;
Matrix matrix;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.compasslayout);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
needleView = (ImageView) findViewById(R.id.needle);
needleBitMap = BitmapFactory.decodeResource(getResources(), R.drawable.star);
matrix = new Matrix();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor == sensor){
int winkel = (int) event.values[0];
//Prüfen, ob Winkel größer oder kleiner als 180 Grad
int swinkel = -winkel+(winkel>180? 360: 0);
matrix.setRotate(DiscoveR.test);
compassBitMap = Bitmap.createBitmap(needleBitMap, 0, 0, needleBitMap.getWidth(), needleBitMap.getHeight(), matrix, true);
needleView.setImageBitmap(compassBitMap);
}
}
}
stecke gerade ein bisschen fest mit meiner App! Funktion soll sein das ein Kompass (ausgehend von der aktuellen Position) sich nach einem Ziel ausrichtet bzw. eben die Nadel auf das Zeil zeigt. Es ist kein Kompass mit Himmelsrichtungen sondern ohne (sodass ich den Kompass selbst nicht drehen muss) aber ich will die Nadel auf das Ziel ausrichten.
Einen normalen kompass hab ich schon hinbekommen(der sich auch aktiv mitdreht) aber eben nicht die ausrichtung auf das Ziel.
Die Daten des Ziels sind Location-Objekte welches latitude und longitude besitzt. Kann mir jemand helfen.
Danke für eure Hilfe!
Anbei der Code:
// Aus Klasse DiscoveR wird statische Variable test durch folgender aufruf //verwendet: test = currentLocation.bearingTo(targetLocation)
// currentLocation ist aktuelle position und targetLocation das Ziel
package de.medieninformatik.discover;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Location;
import android.os.Bundle;
import android.widget.ImageView;
public class Compass extends Activity implements SensorEventListener{
SensorManager sensorManager;
Sensor sensor;
ImageView needleView;
Bitmap compassBitMap;
Bitmap needleBitMap;
Matrix matrix;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.compasslayout);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
needleView = (ImageView) findViewById(R.id.needle);
needleBitMap = BitmapFactory.decodeResource(getResources(), R.drawable.star);
matrix = new Matrix();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor == sensor){
int winkel = (int) event.values[0];
//Prüfen, ob Winkel größer oder kleiner als 180 Grad
int swinkel = -winkel+(winkel>180? 360: 0);
matrix.setRotate(DiscoveR.test);
compassBitMap = Bitmap.createBitmap(needleBitMap, 0, 0, needleBitMap.getWidth(), needleBitMap.getHeight(), matrix, true);
needleView.setImageBitmap(compassBitMap);
}
}
}