1

我已经构建了一个工作正常的指南针应用程序,但它只有一个问题,它是动画,基本上我正在使用 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;
}
4

1 回答 1

1

我相信,如果你平均传感器的变化,它会平滑你的动画。

azimuth = ((azimuth + (int)event.values[0]) / 2);

当然,您总是可以通过保留一组值并做一些更有趣的算术来变得更复杂。

http://en.wikipedia.org/wiki/Average

于 2012-08-02T12:13:12.060 回答