如何使用Accelerometer值在Android中移动图像

时间:2011-06-08 04:11:27

标签: android accelerometer

大家好我想用加速度计值移动图像,但是我无法做到。任何人都可以帮我这样做,我已经在Android开发者网站上看过示例代码,但无法正确理解。

1 个答案:

答案 0 :(得分:5)

要移动图片,请参阅this example中的图片。基本上,关键是获得某种矩阵,并根据某些输入操纵它,在本例中,用户的触摸/拖动。下面的代码不能很好地运行,但它显示了执行拖动所需的关键命令和类。有关更多详细信息,请参阅链接的文章。

Matrix matrix = new Matrix();
savedMatrix.set(matrix);
matrix.postTranslate(event.getX() - start.x)
ImageView view = (Some image view here)
view.setImageMatrix(matrix);

下一部分是以某种方式使用加速度计来获取输入。我要留给你如何最好地将两者结合在一起。我的这些信息来源是this article。有几个基本步骤。

第一步是注册监听器,由此代码完成。

SensorManager  sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);

下一步是注册传感器监听器。最后一点是显示传感器监听器的外观。请注意,加速度计有3个输出,每个x,y和z坐标一个。

@Override
protected void onResume() {
    super.onResume();
    sensorManager.registerListener(accelerationListener, sensor,
            SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onStop() {
    sensorManager.unregisterListener(accelerationListener);
    super.onStop();
}

private SensorEventListener accelerationListener = new SensorEventListener() {
    @Override
    public void onAccuracyChanged(Sensor sensor, int acc) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        x = event.values[0];
        y = event.values[1];
        z = event.values[2];
    }

};

您的下一步将是确定所需应用的x,y和z值。我建议你使用Log.v(TAG,...)语句记录并记录每一个。玩弄它倾斜,并弄清楚你想要做什么。调整它直到它具有正确的灵敏度,通过查看它从直线上下移动多远,并具有某种改变图像的x和y坐标的速率。祝你好运!