我正在测试加速计,并尝试编写一个程序,根据用户倾斜手机的位置显示文本。我有一个文本,将显示当用户倾斜手机右/左和上/下。
我是android新手,所以如果你认为这个问题很愚蠢,请不要投反对票!告诉我我做错了什么,这样我下次就能做得更好!
下面的代码不能很好地工作,我只得到正确和顶部。我不知道为什么…
执行此操作的代码:
@Override
public void onSensorChanged(SensorEvent event) {
// get the change of the x,y,z values of the accelerometer
deltaX = Math.abs(lastX - event.values[0]);
deltaY = Math.abs(lastY - event.values[1]);
deltaZ = Math.abs(lastZ - event.values[2]);
if (deltaX > 2){
HideText();
findViewById(R.id.txtRight).setVisibility(View.VISIBLE);
}
if (deltaY > 2)
{
HideText();
findViewById(R.id.txtUp).setVisibility(View.VISIBLE);
}
if (deltaX < -2)
{
HideText();
findViewById(R.id.txtLeft).setVisibility(View.VISIBLE);
}
if (deltaY < -2) {
HideText();
findViewById(R.id.txtUp).setVisibility(View.VISIBLE);
}
/*else if ((deltaX > vibrateThreshold) || (deltaY > vibrateThreshold) || (deltaZ > vibrateThreshold)){
v.vibrate(100);
HideText();
Toast.makeText(getApplicationContext(), "Stop shaking me!!!",
Toast.LENGTH_LONG).show();
}*/
}
注释掉的代码,我试图使用,如果用户摇电话…但我们会保存到以后:)
代码看起来很好。你的问题来自于Math.abs()
-它取差的绝对值这意味着它总是使其为正deltaX
和deltaY
永远不会是<0。去掉Math.abs()
,应该没问题。