質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.95%

Android上で動く加速度センサからのデータをグラフ化するプログラム

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,024

前提・実現したいこと

Android上で加速度センサのデータを取得しグラフ化するプログラムを作成しています。

発生している問題・エラーメッセージ

R.id.action_mainとR.menu.menu_mainにエラーが発生して動かない状態になっています

エラーメッセージ


Error:(202, 36) エラー: シンボルを見つけられません
シンボル:   変数 menu
場所: クラス R

Error:(214, 23) エラー: シンボルを見つけられません
シンボル:   変数 action_main
場所: クラス id

該当のソースコード

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import org.afree.chart.AFreeChart;
import org.afree.chart.ChartFactory;
import org.afree.chart.axis.ValueAxis;
import org.afree.chart.plot.PlotOrientation;
import org.afree.chart.plot.XYPlot;
import org.afree.data.xy.XYSeries;
import org.afree.data.xy.XYSeriesCollection;
import org.afree.graphics.SolidColor;
import org.afree.graphics.geom.Font;
import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class MainActivity extends Activity {

    // センサーマネージャー
    private SensorManager manager;

    // センサーイベントリスナー
    private SensorEventListener listener;

    Handler handler;
    GraphView spcv = null;

    // 今回の加速度
    private float fAccell[] = new float[3];

    private float gravity[] = { 0.0f, 0.0f, 0.0f };
    private float[] linear_acceleration = { 0.0f, 0.0f, 0.0f };

    private final float alpha = 0.8f;
    private RelativeLayout layout1 = null;

    private List list = new ArrayList<HashMap<String, Float>>();

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

        layout1 = (RelativeLayout)findViewById(R.id.layout1);

        // センサーマネージャーを取得
        manager = (SensorManager)getSystemService(SENSOR_SERVICE);

        // センサーのイベントリスナーを登録
        listener = new SensorEventListener() {

            // 値変更時
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {

                // センサーの種類で値を取得
                switch( sensorEvent.sensor.getType()) {
                    // 加速度
                    case Sensor.TYPE_ACCELEROMETER:
                        fAccell = sensorEvent.values.clone();

                        gravity[0] = alpha * gravity[0] + (1 - alpha) * fAccell[0];
                        gravity[1] = alpha * gravity[1] + (1 - alpha) * fAccell[1];
                        gravity[2] = alpha * gravity[2] + (1 - alpha) * fAccell[2];

                        linear_acceleration[0] = fAccell[0] - gravity[0];
                        linear_acceleration[1] = fAccell[1] - gravity[1];
                        linear_acceleration[2] = fAccell[2] - gravity[2];

                        layout1.setBackgroundColor(Color.TRANSPARENT);
                        if(linear_acceleration[0] >= 1.5f){
                            layout1.setBackgroundColor(Color.BLUE);
                        }
                        if(linear_acceleration[1] >= 1.5f){
                            layout1.setBackgroundColor(Color.YELLOW);
                        }
                        if(linear_acceleration[2] >= 1.5f){
                            layout1.setBackgroundColor(Color.GREEN);
                        }

                        HashMap<String, Float> map = new HashMap<String, Float>();

                        if(list.size() > 100){
                            list.remove(0);
                        }

                        map.put("x", (linear_acceleration[0]));
                        map.put("y", (linear_acceleration[1]));
                        map.put("z", (linear_acceleration[2]));
                        list.add(map);


                        break;
                }

            }

            //
            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {

            }
        };

        // Graph
        spcv = (GraphView) findViewById(R.id.graphView1);

        handler = new Handler();
        Thread repaintThread = new Thread(new Runnable() {
            public void run() {
                while (true) {
                    handler.post(new Runnable() {
                        public void run() {
                            // repaint();
                            XYSeriesCollection dataset = new XYSeriesCollection();
                            XYSeries series1 = new XYSeries("X");
                            XYSeries series2 = new XYSeries("Y");
                            XYSeries series3 = new XYSeries("Z");

                            for(int i=0;i<list.size();i++){
                                HashMap<String, Float> item = (HashMap<String, Float>)list.get(i);
                                float x = Float.parseFloat(item.get("x").toString());
                                float y = Float.parseFloat(item.get("y").toString());
                                float z = Float.parseFloat(item.get("z").toString());

                                series1.add(i+1, x);
                                series2.add(i+1, y);
                                series3.add(i+1, z);
                            }

                            dataset.addSeries(series1);
                            dataset.addSeries(series2);
                            dataset.addSeries(series3);

                            // chart
                            AFreeChart chart = ChartFactory.createXYLineChart(
                                    "加速度",
                                    "時間",
                                    "加速度",
                                    dataset,
                                    PlotOrientation.VERTICAL,
                                    false,
                                    true,
                                    false
                            );

                            // XY軸の加工
                            XYPlot plot = chart.getXYPlot();
                            ValueAxis xAxis = plot.getDomainAxis();
                            ValueAxis yAxis = plot.getRangeAxis();
                            yAxis.setRange(-3, 3);

                            // tickラベルのフォントを変更
                            Font xyTitleFont = new Font(Typeface.SANS_SERIF, Typeface.BOLD, 30);
                            xAxis.setTickLabelFont(xyTitleFont);
                            yAxis.setTickLabelFont(xyTitleFont);

                            // chartの背景と枠線を変更
                            chart.setBackgroundPaintType(new SolidColor(Color.GRAY));//背景の色
                            chart.setBorderPaintType(new SolidColor(Color.BLACK));//枠線の色

                            // チャートに設定して再描画
                            spcv.setChart(chart);
                            spcv.postInvalidate();
                        }
                    });
                    try {
                        // 500ミリ秒
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO 自動生成された catch ブロック
                        e.printStackTrace();
                    }
                }
            }
        });
        repaintThread.start();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_main) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {
        super.onResume();

        // リスナー設定:加速度
        manager.registerListener(
                listener,
                manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_UI);

    }


    @Override
    protected void onPause() {
        super.onPause();

        // リスナー解除
        manager.unregisterListener(listener);
    }
}

     

試したこと  

activity_main.xmlを確認しましたがエラーはありませんでした     

補足情報(言語/FW/ツール等のバージョンなど)  

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

下記の2点を確認してください。

  • res/menuの下にmenu_main.xmlは存在しているか。
  • エラーメッセージの追記

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/27 13:55

    ご回答ありがとうございます。
    ご指摘頂いた2点について確認を行いました。
    結果として
    ・res/menu自体が存在しなかった
    ・シンボル以外のエラーとして
    注意:/Users/hoge/AndroidStudioProjects/Accelerometer/app/src/main/java/com/example/hoge/accelerometer/MainActivity.javaの操作は、未チェックまたは安全ではありません。
    注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
    :app:compileDebugJavaWithJavac FAILED
    Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
    > Compilation failed; see the compiler error output for details.
    といった内容のエラーを確認いたしました

    このような場合どうしたら良いでしょうか
    よろしくお願いいたします。

    キャンセル

  • 2016/05/27 13:58

    存在しないリソースファイルを使おうとしているのでエラーになっています。

    メニューを使わないのであればエラーが出ている2つのメソッドを消すと良いでしょう。
    メニューを使うならリソースファイルを定義する必要があります。

    キャンセル

  • 2016/05/30 22:30

    ありがとうございました。実行できました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る