Kompass

  • 6 Antworten
  • Neuester Beitrag
Diskutiere Kompass im Android App Entwicklung im Bereich Betriebssysteme & Apps.
L

LoLmAnxD1998

Ambitioniertes Mitglied
Hallo,

Ich bin noch nicht so lange am Programmieren. Ich habe mir ein Buch gekauft in dem unter Anderem ein Kompass programmiert wird. Das hab ich auch alles verstanden, nur möchte ich jetzt den Kompass in einer anderen App auch machen, aber nicht über den ganzen Bildschirm wie in der Kompass App.
Wie kann ich das auf ein Layout begrenzen ? :) Hier noch der Code:
MainActivity:
Code:
public class MainActivity extends Activity implements SensorEventListener {

	private SensorManager sensorManager;
	private Sensor magnetfeldSensor;
	private KompassnadelView view;

	public void onSensorChanged(SensorEvent event) {
		if (view != null) {
			view.setWinkel(-event.values[0]);
		}
	}

	public void onAccuracyChanged(Sensor sensor, int accuracy) {
	}

	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle b) {
		super.onCreate(b);
		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
		magnetfeldSensor = sensorManager
				.getDefaultSensor(Sensor.TYPE_ORIENTATION);

		view = new KompassnadelView(this);
		setContentView(view);
	}

	@Override
	protected void onResume() {
		super.onResume();
		sensorManager.registerListener(this, magnetfeldSensor,
				SensorManager.SENSOR_DELAY_GAME);
	}

	@Override
	protected void onPause() {
		sensorManager.unregisterListener(this);
		super.onPause();
	}

}
KompassNadelView:

Code:
public class KompassnadelView extends View {
	
    private Paint zeichenfarbe = new Paint();
    
    private float winkel=0;

    public KompassnadelView(Context context) {
        super(context);
        
        zeichenfarbe.setAntiAlias(true);
        zeichenfarbe.setColor(Color.GREEN);
        zeichenfarbe.setStyle(Paint.Style.FILL);
        
        
    }
    
    public void setWinkel(float winkel) {
		this.winkel = winkel;
		invalidate();
	}

    @Override 
    protected void onDraw(Canvas canvas) {

        canvas.drawColor(Color.BLACK);

        int breite = canvas.getWidth();
        int hoehe = canvas.getHeight();
        int laenge = Math.min(breite, hoehe);
        
        Path pfad = new Path();
        pfad.moveTo(0, -laenge/2);
        pfad.lineTo(laenge/20, laenge/2);
        pfad.lineTo(-laenge/20, laenge/2);
        pfad.close();
        
		canvas.translate(breite/2, hoehe/2);
		canvas.rotate(winkel);
		canvas.drawPath(pfad, zeichenfarbe);
    }
 
H

Hoerti

Neues Mitglied
Das ganze musst du in deiner View im Ordner layout anpassen! Dort kannst du entweder eine fixe Breite setzen oder aber und das würde ich dir raten, mit relativen Werten für Höhe und Breite arbeiten.
 
L

LoLmAnxD1998

Ambitioniertes Mitglied
Wo genau soll ich jetzt was ändern ? :s

Gesendet von meinem GT-P5100 mit der Android-Hilfe.de App
 
H

Hoerti

Neues Mitglied
Die Anzeige deines Layout änderst du im Ordner res unter layout. Dort muss es eine Datei geben mit einer .xml Endung. Genau dort änderst du auch die Höhe/Breite deiner View.
 
L

LoLmAnxD1998

Ambitioniertes Mitglied
Da steht nur das drinn :

Der ursprüngliche Beitrag von 18:38 Uhr wurde um 18:38 Uhr ergänzt:

Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

</RelativeLayout>
 
H

Hoerti

Neues Mitglied
Für die Werte layout_height und width kannst du Werte vergeben, womit sich dein Kompass verkleinern/vergrößern dürfte.
 
L

LoLmAnxD1998

Ambitioniertes Mitglied
Ok Dankeschön :)

Gesendet von meinem GT-P5100 mit der Android-Hilfe.de App