2017-08-06 5 views
0

私はアンドロイドには新しく、モバイルセンサーについてもっと学ぶためにアプリを開発しています。まず、私は加速度計を使用しています。加速度計の値を使ってグラフを生成する方法は?

最初に、加速度計の値を取得するために、2つのボタン(開始点と終了点)があるレイアウトを作成しました。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.ivope.sensormanipulator.SensorManipulator"> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_x="50dp" 
     android:layout_y="46dp" 
     android:text="Accelerometer Signal Analyser" 
     android:textColor="@color/black" 
     android:textSize="20dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintVertical_bias="0.197" 
     android:layout_below="@+id/graph" 
     android:layout_alignRight="@+id/btnStop" 
     android:layout_alignEnd="@+id/btnStop" 
     android:layout_marginTop="71dp" /> 

    <com.jjoe64.graphview.GraphView 
     android:layout_width="match_parent" 
     android:layout_height="200dip" 
     android:id="@+id/graph" 
     android:layout_gravity="center" 
     /> 


    <Button 
     android:id="@+id/btnStart" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start" 
     android:layout_x="75dp" 
     android:layout_y="167dp" 
     android:background="@color/green" 
     android:clickable="true" 
     android:text="Start" 
     tools:layout_editor_absoluteX="56dp" 
     tools:layout_editor_absoluteY="231dp" 
     android:layout_below="@+id/textView" 
     android:layout_alignLeft="@+id/textView" 
     android:layout_alignStart="@+id/textView" 
     android:layout_marginTop="75dp" /> 

    <Button 
     android:id="@+id/btnStop" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_x="220dp" 
     android:layout_y="167dp" 
     android:background="@color/red" 
     android:clickable="true" 
     android:text="Finish" 
     tools:layout_editor_absoluteX="242dp" 
     tools:layout_editor_absoluteY="231dp" 
     android:layout_marginRight="47dp" 
     android:layout_marginEnd="47dp" 
     android:layout_alignBaseline="@+id/btnStart" 
     android:layout_alignBottom="@+id/btnStart" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 
</RelativeLayout> 

メインクラスでは、私はSensorManagerとonResume、onPauseとonSensorChanged関数を実装しました。また、onclick関数のstart(onResumeの実行)とfinish(onPauseの実行)を実装しました。 ax、ay、azの3つの値を与えると仮定します。これらの3つの値を使ってグラフを生成したい。私はアンドロイドGraphView、私のアプリが正常にビルドしようとしたが、それは実行されません。何人かが私を助けてくれますか?私は加速度計の値を正しく取得しようとしている方法ですか?どのようにこれらの値を持つグラフを生成できますか?

Javaコード:加速度計の値を使用して

package com.example.ivope.sensormanipulator; 

import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.WebView; 
import android.widget.Button; 

import com.jjoe64.graphview.GraphView; 
import com.jjoe64.graphview.series.DataPoint; 
import com.jjoe64.graphview.series.LineGraphSeries; 

public class SensorManipulator extends AppCompatActivity implements SensorEventListener { 

    private final SensorManager mSensorManager; 
    private final Sensor mAccelerometer; 
    double ax, ay, az, y; 

    public SensorManipulator() { 
     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    } 

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

     GraphView graph = (GraphView) findViewById(R.id.graph); 
     LineGraphSeries<DataPoint> series = new LineGraphSeries<>(); 
     for (int i = 0; i < 5; i++){ 
      ax = ax + 0.1; 
      y = Math.sin(ax); 
      series.appendData(new DataPoint(ax, y), true, 5); 
     } 
     graph.addSeries(series); 

     Button btnStart = (Button) findViewById(R.id.btnStart); 
     Button btnStop = (Button) findViewById(R.id.btnStop); 

     btnStart.setOnClickListener(new OnClickListener() { 

             @Override 
             public void onClick(View view) { 
             onResume(); 
             } 
            } 
     ); 

     btnStop.setOnClickListener(new OnClickListener() { 

             @Override 
             public void onClick(View view) { 
              onPause(); 
             } 
            } 
     ); 


    } 

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

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

    @Override 
    public void onAccuracyChanged(Sensor arg0, int arg1) { 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      ax = event.values[0]; 
      ay = event.values[1]; 
      az = event.values[2]; 
     } 
    } 

} 
+1

ログを使用して、アプリがクラッシュする場所を特定します。 https://developer.android.com/reference/android/util/Log.html –

答えて

0

リアルタイムアンドロイドチャート。私のGitHubリポジトリでAndroid-Real-Time-Chartをチェックしてください。この図はAndroid GraphWiewライブラリで作成されています。

私はあなたの(lvo Queiroz)の要件を満たすことを望みます。必要があれば、私はさらなる議論のためにコメントしてください。

+0

私は見ていきます。ありがとう! –

関連する問題