2016-06-18 10 views
0

私の携帯電話のジャイロからデータを取得しようとしています。 これまでの角度は、私の携帯電話を動かす角度によって変わってきます。しかしandroidの方位センサーを調整する方法

、例えば方位角は、私はそれが私が開始位置からではなく、北方向からカウントを開始したい - >私は私の質問があり、それは0

から始めたい:どのようにすることができます私はジャイロから取得した最初のデータを保存するので、電話機を移動すると残りのデータから「マイナス」を行うことができますか? コードは次のようになります。

rotationx.setText(" " +event.values[0]-FirstAzimuthValue); 

ありがとう:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    rotationvector=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION); 
    sm.registerListener(this,rotationvector,SensorManager.SENSOR_DELAY_NORMAL); 

    rotationx=(TextView)findViewById(R.id.rotationx); 
    rotationy=(TextView)findViewById(R.id.rotationy); 
    rotationz=(TextView)findViewById(R.id.rotationz); 


} 
@Override 
public void onSensorChanged(SensorEvent event) { 


    rotationx.setText(" " +event.values[0]); 
    rotationy.setText(" " +event.values[1]); 
    rotationz.setText(" " +event.values[2]); 

} 

私がやりたい事はのようなものです!

新しいコード:

private boolean isFirstMeasure = true; 
private float FirstAzimuthValue = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sm=(SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    rotationvector=sm.getDefaultSensor(Sensor.TYPE_ORIENTATION); 
    sm.registerListener(this,rotationvector,SensorManager.SENSOR_DELAY_NORMAL); 

    rotationx=(TextView)findViewById(R.id.rotationx); 
    rotationy=(TextView)findViewById(R.id.rotationy); 
    rotationz=(TextView)findViewById(R.id.rotationz); 

} 
@Override 
public void onSensorChanged(SensorEvent event) { 

    if (isFirstMeasure){ 
     FirstAzimuthValue - event.values[0]; //error this line 
     isFirstMeasure = false; 
    } 

    rotationx.setText(" " +(event.values[0] - FirstAzimuthValue)); 
    rotationy.setText(" " +event.values[1]); 
    rotationz.setText(" " +event.values[2]); 

} 
+1

ねえのonCreate関数の角度をチェックして、firstazimuthvalueという名前の変数に保存し、その後、あなたが好きそれを行う.. – DAVIDBALAS1

答えて

1

なぜだけではなく、

private boolean isFirstMeasure = true; 
private float firstAzimuthValue = 0; 

// ... 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (isFirstMeasure) { 
     firstAzimuthValue = event.values[0]; 
     isFirstMeasure = false; 
    } 

    rotationx.setText(" " + (event.values[0] - firstAzimuthValue)); 
    rotationy.setText(" " +event.values[1]); 
    rotationz.setText(" " +event.values[2]); 
} 
+0

antonio、私はあなたが言ったことをしようとした、それは2つの問題を与える:1)ifステートメントでは、 "ステートメントではない"と言う。 2)rotationxでは浮動小数点で「マイナス」をしないでください。 – Ben

+0

私の編集で解決した2番目の問題(私の間違い)。最初の問題は誤解でなければなりません。新しいコードを投稿できますか? – antonio

+0

私のタイプミスを修正しました。もう一度やり直してください。ごめんなさい – antonio

関連する問題