2012-06-14 106 views
0

我试图制作一个应用程序,以什么角度显示我的设备正在旋转,还有一个菜单可以让我选择以度或弧度查看结果,但在运行此代码后仅显示屏幕正在出现的显示布局和旋转设备什么都没发生plzz告诉我,提前角度旋转探测器

package com.example.directordetector; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mInitialized = false; 
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mAccelerometer = mSensorManager 
      .getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 
    mSensorManager.registerListener(this, mAccelerometer, 
      SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_name, menu); 
    return true; 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.degree: 
     m = 0; 
     return true; 
    case R.id.radian: 
     m = 1; 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 

    } 

} 

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 sensor, int accuracy) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    // TODO Auto-generated method stub 
    TextView tvX = (TextView) findViewById(R.id.x_axis); 
    TextView tvY = (TextView) findViewById(R.id.y_axis); 
    TextView tvZ = (TextView) findViewById(R.id.z_axis); 
    float x = event.values[0]; 
    float y = event.values[1]; 
    float z = event.values[2]; 
    if (!mInitialized) { 
     mLastX = x; 
     mLastY = y; 
     mLastZ = z; 
     tvX.setText("0.0"); 
     tvY.setText("0.0"); 
     tvZ.setText("0.0"); 
     mInitialized = true; 
    } else { 
     float deltaX = Math.abs(mLastX - x); 
     float deltaY = Math.abs(mLastY - y); 
     float deltaZ = Math.abs(mLastZ - z); 
     if (deltaX < NOISE) 
      deltaX = (float) 0.0; 

     if (deltaY < NOISE) 
      deltaY = (float) 0.0; 

     if (deltaZ < NOISE) 
      deltaZ = (float) 0.0; 
     mLastX = x; 
     mLastY = y; 
     mLastZ = z; 
     if (m == 1) { 

      deltaX = (float) (deltaX * (3.18/180)); 
      deltaX = (float) (deltaX * (3.18/180)); 
      deltaX = (float) (deltaX * (3.18/180)); 
     } 

     tvX.setText(Float.toString(deltaX)); 
     tvY.setText(Float.toString(deltaY)); 
     tvZ.setText(Float.toString(deltaZ)); 

    } 

} 
} 

回答

0

关闭我的头顶,我错了感谢名单我不知道为什么它不会工作。但我建议你不要让findViewById()调用在你的传感器侦听器回调中。该方法相当昂贵,并且您的传感器回调将接收大量呼叫。

声明你的意见的活动,并在的onCreate实例化它们()这样的:

TextView tvX; 
TextView tvY; 
TextView tvZ; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    tvX = (TextView) findViewById(R.id.x_axis); 
    tvY = (TextView) findViewById(R.id.y_axis); 
    tvZ = (TextView) findViewById(R.id.z_axis); 
    ... 
} 

这样,你只调用findViewById()一次,你随时都可以使用您的引用更改TextView中的文本。

当你运行你现在究竟发生了什么? TextViews被设置为“0.0”并保持这种状态吗?还是他们没有定下来?

+0

它根本没有设置 –

0

findViewById()中的onCreate(属于)方法(我还写了 将执行依赖注入的意见和其他一些一样的东西小型图书馆:https://github.com/ko5tik/andject

和加速度计被旋转错误的传感器 - 您可以检测移动或倾斜设备,但不围绕其中一个设备轴旋转。为此使用磁场传感器

+0

为什么不使用GravitySensor? –

+0

它不会为您提供轮换信息。只有设备加速的方向。 –

+0

加速度计将不会显示我的旋转角度意味着我的设备旋转的角度是多少? –