1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. philippsw, 30.10.2018 #1
    philippsw

    philippsw Threadstarter Neuer Benutzer

    Hallo Leute!
    Ich versuche zurzeit eine App zu programmieren in der sich ein Objekt (bei mir einfach ein Kreis) in die Richtung bewegt, in die das Handy geneigt wird. Dazu habe ich die Werte des Sensors "Game Rotatian Vektor" einlesen lassen. Das Programm dazu läuft ohne Probleme, der Kreis bewegt sich in die Richtige Richtung..leider nur solange das Handy nicht in der Z-Achse bewegt wird (Achse, die aus dem Bildschirm kommt). Dann passen die Werte des Sensors nicht mehr. Hat jemand eine Idee wie man das Problem beheben bzw. ausgleichen kann?

    package com.example.phsch019.beschleunigungssensor;

    import android.app.Activity;
    import android.content.Intent;
    import android.hardware.Sensor;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.text.method.ScrollingMovementMethod;
    import android.view.ActionMode;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class MainActivity extends Activity implements View.OnClickListener{

    float merker_x;
    float merker_y;
    float merker_z;

    TextView tv_xAchseMax;
    TextView tv_yAchseMax;
    TextView tv_zAchseMax;
    TextView tv_xAchse;
    TextView tv_yAchse;
    TextView tv_zAchse;
    Button bt_clear;



    public SensorData test = new SensorData(this);

    @override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv_xAchseMax = findViewById(R.id.x_achse_max);
    tv_yAchseMax = findViewById(R.id.y_achse_max);
    tv_zAchseMax = findViewById(R.id.z_achse_max);
    tv_xAchse = findViewById(R.id.x_achse);
    tv_xAchse.setMovementMethod(new ScrollingMovementMethod());
    tv_yAchse = findViewById(R.id.y_achse);
    tv_yAchse.setMovementMethod(new ScrollingMovementMethod());
    tv_zAchse = findViewById(R.id.z_achse);
    tv_zAchse.setMovementMethod(new ScrollingMovementMethod());

    bt_clear = findViewById(R.id.bt_clear);
    bt_clear.setOnClickListener(this);

    //_callback hier =! null und wird so in SensorData aufgerufen
    test._callback = new SensorData.ISensorCallback() {
    @override
    public void onSensorArrived(float[] sensorData,float[] max_sensorData) {


    // Synchronisierung Hintergrundprozess (Sensor) und UI-Prozess
    // UI Thread muss kurz unterbrochen werden, um Label zu setzen
    /*runOnUiThread(new Runnable() {
    @override
    public void run() {
    tv_xAchse.setText(Float.toString(sensorData[0]));
    }
    });*///(nicht notwendig, Android Studio macht das intern selber!)

    //max. Werte in der Activity ausgeben
    tv_xAchseMax.setText(" max. Beschleunigung der X-Achse: "+ max_sensorData[0]*100);
    tv_yAchseMax.setText(" max. Beschleunigung der Y-Achse: "+ max_sensorData[1]*100);
    tv_zAchseMax.setText(" max. Beschleunigung der Z-Achse: "+ max_sensorData[2]*100);

    //zur besseren darstellung mit 100 multipliziert (nur bei Game Rotation Sensor!!!)
    sensorData[0]=sensorData[0]*100;
    sensorData[1]=sensorData[1]*100;
    sensorData[2]=sensorData[2]*100;
    //es werden nur Werte ausgegeben die um -+0,5 größer sind!
    if ((sensorData[0] >= (merker_x+0.005))||(sensorData[0] <= (merker_x-0.005))) {
    tv_xAchse.setText(Float.toString(sensorData[0]) + "\n");
    }
    if ((sensorData[1] >= (merker_y+0.005))||(sensorData[1] <= (merker_y-0.005))) {
    tv_yAchse.setText(Float.toString(sensorData[1]) + "\n");
    }
    if ((sensorData[2] >= (merker_z+0.005))||(sensorData[2] <= (merker_z-0.005))) {
    tv_zAchse.setText(Float.toString(sensorData[2]) + "\n");
    }
    //Merker für den Vergleich der Differenz
    merker_x = sensorData[0];
    merker_y = sensorData[1];
    merker_z = sensorData[2];
    }
    };
    //init & start the Sensor
    test.startSensor();


    }

    @override
    protected void onResume() {
    super.onResume();
    tv_xAchse.setText("X-Achse:\n");
    tv_yAchse.setText("Y-Achse:\n");
    tv_zAchse.setText("Z-Achse:\n");
    }

    @override
    public void onClick(View view){
    //Sensorwerte werden gelöscht beim betätigen von Clear all
    //ACHTUNG: bei mehreren Button Abfrage mit switch case erforderlich!
    tv_xAchse.setText("X-Achse:\n");
    tv_yAchse.setText("Y-Achse:\n");
    tv_zAchse.setText("Z-Achse:\n");
    }


    @override
    public void onPause() {
    super.onPause();
    //test: Objekt von Sensordata -> _unregister: Objekt der Unterklasse(interface) IUnregisterCallback
    test._unregister = new SensorData.IUnregisterCallback() {
    @override
    public void unregisterSensor(SensorManager listener, Sensor accelerometer) {
    //Sensor wird abgemeldet
    test._unregister.unregisterSensor(listener,accelerometer);
    }

    };
    }

    }
     
  2. jogimuc, 30.10.2018 #2
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo zu deinem Code.
    Ich kann leider nichts in deinen Code finden was du bewegst, schon gar nicht einen Kreis.

    Du zeigt die werte ja nur an mehr nicht . Auch dein Anfängliches verschieben der Textview macht für mich keinen sinn.
    Bist du dir sicher uns den richtigen Code gegeben zu haben?
     
  3. philippsw, 02.11.2018 #3
    philippsw

    philippsw Threadstarter Neuer Benutzer

    Hallo und danke erstmal für deine schnelle Antwort!
    Du hast natürlich vollkommen Recht ->ich muss mich entschuldigen. Montag kann ich den richtigen Code reinstellen,
    sowas passiert wenn man zu viele Programme aufhaut:1f611:.
     
  4. philippsw, 05.11.2018 #4
    philippsw

    philippsw Threadstarter Neuer Benutzer

    Hier der Code...

    public class MainActivity extends Activity implements View.OnClickListener{

    private ImageView greenPoint;
    private Button btKalibrierung;
    private Button btStart;
    public float xWert;
    public float yWert;


    public SensorData test = new SensorData(this);

    @override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    greenPoint = findViewById(R.id.GreenPoint);
    btKalibrierung = findViewById(R.id.bt_kalibrierung);
    btKalibrierung.setOnClickListener(this); // calling onClick() method
    btStart = findViewById(R.id.bt_start);
    btStart.setOnClickListener(this);



    //_callback hier =! null und wird so in SensorData aufgerufen
    test._callback = new SensorData.ISensorCallback() {
    @override
    public void onSensorArrived(float[] sensorData, float[] max_sensorData) {

    // Synchronisierung Hintergrundprozess (Sensor) und UI-Prozess
    // UI Thread muss kurz unterbrochen werden, um Label zu setzen
    /*runOnUiThread(new Runnable() {
    @override
    public void run() {
    tv_xAchse.setText(Float.toString(sensorData[0]));
    }
    });*///(nicht notwendig, Android Studio macht das intern selber!)


    //Werte zur besseren darstellung mit 100 multipliziert
    float sensorData0 = Math.round(sensorData[0] * 100 * 20);
    float sensorData1 = Math.round(sensorData[1] * 100 * 20);
    //float sensorData2 = Math.round(sensorData[2] * 100); //Z-Achse


    //Rechts- und Linksneigung
    if ((sensorData0 > 0) && (sensorData0 <= 500)) {
    ;
    greenPoint.setTranslationY(sensorData0);
    //params.setMargins(0,240-sensorData0 ,0 ,0);
    } else if ((sensorData0 > 500)) {
    greenPoint.setTranslationY(500);
    } else if ((sensorData0 < 0) && (sensorData0 >= -500)) {
    greenPoint.setTranslationY(sensorData0);
    } else if ((sensorData0 < -500)) {
    greenPoint.setTranslationY(-500);
    }

    //hoch und runter
    if ((sensorData1 > 0) && (sensorData1 <= 500)) {
    greenPoint.setTranslationX(sensorData1);
    } else if ((sensorData1 > 500)) {
    greenPoint.setTranslationX(500);
    } else if ((sensorData1 < 0) && (sensorData1 >= -500)) {
    greenPoint.setTranslationX(sensorData1);
    } else if ((sensorData1 < -100)) {
    greenPoint.setTranslationX(-500);
    }

    }
    };

    //init & start the Sensor
    test.startSensor();


    }
     
  5. jogimuc, 05.11.2018 #5
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo ich glaube du hast da zwischen X u. Y einen Dreher drin.
    sensorData0 ist "X" und du macht da setTranslationY also verschieben nach "Y"
     
  6. jogimuc, 06.11.2018 #6
    jogimuc

    jogimuc Erfahrener Benutzer

    Lade dir mal Cpu-Z gehe dort auf Sensors. Da kannst du recht gut beobachten welche Axse bei welcher bewegung des Handys anspricht.
     
    philippsw bedankt sich.
Die Seite wird geladen...
Ähnliche Themen Forum Datum
GPS Lokalisierung Android App Entwicklung Gestern um 09:07 Uhr
Eigene App auf Smartwatch installieren klappt nicht Android App Entwicklung 08.11.2018
In App Käufe programmieren Android App Entwicklung 04.11.2018
mindest API ist 26?! Android App Entwicklung 01.11.2018
Wie float wert von android App an desktop Applikation per Bluetooth senden? Android App Entwicklung 29.10.2018
Neigungssensor ansprechen und wert ausgeben in App Android App Entwicklung 14.10.2018
MIT AppInventor App erstellen um PDFs zu öffnen, problem Android App Entwicklung 10.10.2018
Kosten/ Aufwand für ne Android App für Vereinsaufgaben? Android App Entwicklung 08.10.2018
Welches Tut/Buch/... für meine App-Idee? Android App Entwicklung 01.10.2018
Google Play: mind. Android 8.0 (API level 26) - Eclipse Android App Entwicklung 30.09.2018
Du betrachtest das Thema "Android App - Objekt bewegt sich nach Handyneigung" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.