这是代码
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
getAccelerometer(event);
}
}
private void getAccelerometer(SensorEvent event) {
float[] values = event.values;
//Movement
float x = values[0];
float y = values[1];
float z = values[2];
float accelationSquareRoot = (x * x + y * y + z * z)
/ (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
long actualTime = System.currentTimeMillis();
if (accelationSquareRoot >= 2) //
{
if (actualTime - lastUpdate < 200) {
return;
}
if (distance <= 50 && distance > 40) {
view.setBackgroundColor(Color.GREEN);
while (distance > 0) {
distance--;
Integer.toString(distance);
lastUpdate = actualTime;
Toast.makeText(this, distance, Toast.LENGTH_SHORT)
.show();
int distance = Integer.parseInt(distance);
}
if (distance < 40){
view.setBackgroundColor(Color.YELLOW);
}
} else {
view.setBackgroundColor(Color.RED);
}
color = !color;
}
}
每次摇动设备时,我都会尝试使用距离变量进行缩小和查看。
这是代码出错的地方。
int distance = Integer.parseInt(distance);
它要我改变变量的名称。如果我这样做,我的循环将无法正常工作。
提前致谢!
答案 0 :(得分:5)
为什么不将距离保留为int值并使用String.format()
代替Toast
?即。
Toast.makeText(this, String.format("%d", distance), Toast.LENGTH_SHORT).show();
从UI的角度来看,我不确定我是否希望在循环的每次迭代中发送Toast消息,可能更新TextView
小部件可能会更好。
答案 1 :(得分:0)
错误是因为您声明了两次相同的变量。此外,您无需将distance
转换为String
即可在Toast
中展示,只需在"" +
之前添加distance
。因此,通过这样做,您可以删除这两行:
Integer.toString(distance);
int distance = Integer.parseInt(distance);
答案 2 :(得分:0)
所以你要将int的距离转换为字符串再转回?你可以为你的字符串使用另一个变量来保存这种类型的转换头痛吗?
编辑:被Karl和jbihan击败。他们的答案相互补充。您可以丢失两行并解决问题。