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

dha*_*ran 2 android accelerometer

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

Pea*_*oto 5

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

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

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

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

SensorManager  sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
Run Code Online (Sandbox Code Playgroud)

下一步是注册传感器监听器.最后一点是显示传感器监听器的外观.请注意,加速度计有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];
    }

};
Run Code Online (Sandbox Code Playgroud)

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