0 度から 90 度の間の角度のみを取得したいのですが、デバイスが 90 度のときに onSensorChnaged の角度が間違っています。その後 105 度になっています。正しい角度を取得するのを手伝ってください。これをデバイス samsung galaxy s duos でテストしました。また、UI がフリーズします。
private void init() {
oldBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.clock1);
w = oldBitmap.getWidth();
h = oldBitmap.getHeight();
mtx = new Matrix();
degrees = Integer.parseInt(x.toString());
mtx.postRotate(-degrees);
oldBitmap = Bitmap.createBitmap(oldBitmap, 0, 0, w, h, mtx, true);
img.setScaleType(ScaleType.CENTER);
img.setImageBitmap(oldBitmap);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
//x = (int) Math.pow(event.values[0], 2); // is for the right to left or left to right side angle
//x = (int) Math.pow(event.values[2], 2); // this is for the bottom to top or top to bottom side angle
x = (int) Math.pow(event.values[1], 2); // this is for both side angle
try {
Log.i("my x is..", "my degree is..."+x);
txtanglex.setText(x.toString());
init();
} catch (Exception e) {
e.printStackTrace();
}
}
}
上記のコードから、0 から 105 の間のデバイス角度を取得します