Inne działy

 

Android akcelerometr - Przykład

 

W tej przykładowej aplikacji pokazujemy zastosowanie czujnika, który nazywamy akcelerometr czyli czujnik przyspieszenia. Obecnie najczęściej jest wykorzystywany w grach ruchowych, w których użytkownik przechyla telefon aby wykonać konkretne działania, lub używa się go do wykrywania potrząsania telefonem. Stało się powszechne potrząsanie urządzeniem, aby zresetować aplikację lub usunąć płótno w aplikacji graficznej.

 

W tym przykładzie będziemy zmieniać obraz w kontrolce ImageView w odniesieniu do działań użytkowników (takich jak przechylanie telefonu w górę, dół, prawo i lewo). Podobnie jak w przykładzie wykorzystującym czujnik zbliżeniowy używamy klasy SensorManageri usługi czujnika przyspieszenia. Wmetodzie onSensorChanged monitorujemy wartości czujnika we wszystkich 3 osiach (x, y i z). Utrzymujemy próg o wartości od 2,0 do położenia środkowego i zmieniamy obraz zgodnie z wartościami osi. 

Projekt wykonany w AndroidStudio

Więc zacznijmy:

 

Utwórz nowy projekt File -> New Project… Pozostaw domyślne nazwy plików dla aktywności MainActivity.java dla pliku wyglądu activity_main.xml

Teraz zaprojektujemy interfejs użytkownika w pliku activity_main.xml zawierający kontrolki ImageView i TextView. W folderze drawable umieśćmy cztery pliki ze strzałkami dla położenia środkowego, w górę, w dół, w prawo, w lewo aby odróżnić każdy ruch przechylania.

 

activity_main.xml

 

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="pl.uazz.pochylenie.app.MainActivity">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Przechyl telefon, aby zobaczyć różnicę"
        android:id="@+id/txt"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="54dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView1"
        android:layout_below="@+id/txt"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="78dp"
        />
</RelativeLayout>

 

Teraz w pliku MainActivity.java zastosujemy logikę, aby określić akcję przechylania i zastąpić odpowiednio obrazy. Nie zapomnij wyrejestrować czujnika aby oszczędzać baterię.

 

MainActivity.java 

 

package pl.uazz.pochylenie.app;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity implements SensorEventListener {

    private SensorManager mSensorManager;
    private Sensor mAccelerometr;
    TextView title;
    ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        mAccelerometr = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        title = (TextView)findViewById(R.id.txt);
        iv = (ImageView)findViewById(R.id.imageView1);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    public void onAccuracyChanged(Sensor arg0, int arg1){
        //nie wykorzystywane
    }

    public void onSensorChanged(SensorEvent event){

        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];

        if(Math.abs(x) > Math.abs(y)){
            if(x < 0){
                iv.setImageResource(R.drawable.prawo);
            }
            if(x > 0){
                iv.setImageResource(R.drawable.lewo);
            }
        } else {
            if(y < 0){
                iv.setImageResource(R.drawable.gora);
            }
            if(y > 0){
                iv.setImageResource(R.drawable.dol);
            }
        }

        if(x > (-2) && x < (2) && y > (-2) && y < (2)){
            iv.setImageResource(R.drawable.srodek);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mAccelerometr,SensorManager.SENSOR_DELAY_NORMAL);
    }

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

}

Uruchom i wypróbuj przykład.

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.