大家好我想用加速度计值移动图像,但是我无法做到。任何人都可以帮我这样做,我已经在Android开发者网站上看过示例代码,但无法正确理解。
答案 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坐标的速率。祝你好运!