Kompass

  • 6 Antworten
  • Letztes Antwortdatum
L

LoLmAnxD1998

Ambitioniertes Mitglied
0
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);
    }
 
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.
 
Wo genau soll ich jetzt was ändern ? :s

Gesendet von meinem GT-P5100 mit der Android-Hilfe.de App
 
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.
 
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>
 
Für die Werte layout_height und width kannst du Werte vergeben, womit sich dein Kompass verkleinern/vergrößern dürfte.
 
  • Danke
Reaktionen: LoLmAnxD1998
Ok Dankeschön :)

Gesendet von meinem GT-P5100 mit der Android-Hilfe.de App
 
Zurück
Oben Unten