我已经建立了一个指南针应用程序,它工作得非常好,但它只有一个问题,那就是动画,基本上我是使用SensorEventListener中的matrix.setRotate onSensorChanged方法旋转一个ImageView(一个nidle图像)。nidle正在旋转,但速度非常快,这似乎不太好。我想要的是以较低的速度旋转图像。就像IPhone内置的指南针一样。我们需要你的专业意见。
privateSensorEventListener mySensorEventListener= newSensorEventListener() {
.
.
.
public void onSensorChanged(SensorEvent event) {
.
.
.
azimuth= (int) event.values[0];
allowRotating=true;
dialer.post(new RotateRunnable(azimuth));
.
.
.
}}; Runnable,在传感器数据更改时调用
private class RotateRunnable implementsRunnable {
private int Degrees;
public Rotate Runnable(intDegrees) {
this.Degrees= Degrees;
}
public void run() {
if(allowRotating) {
rotateDialer(Degrees);
dialer.post(this);
}
}
}旋转图像的方法
private void rotateDialer(int Degrees) {
matrix.setRotate(360-Degrees, dialerWidth/ 2, dialerHeight/ 2);
dialer.setScaleType(ScaleType.MATRIX);
dialer.setImageMatrix(matrix);
allowRotating=false;
}发布于 2012-08-02 20:13:12
我相信,如果你平均传感器的变化,它会平滑你的动画。
azimuth = ((azimuth + (int)event.values[0]) / 2);当然,通过保留一组值并做一些更有趣的算术,您总是可以变得更复杂。
http://en.wikipedia.org/wiki/Average
https://stackoverflow.com/questions/11777051
复制相似问题