我在我的应用程序中做了一个小实验,我试图绘制一条线来移动/旋转,以便它始终与地面平行。因此,例如,如果电话倾斜45度,则该线将以相反的方向旋转45度。在Android上绘制一条总是与地面平行的线
这是我目前实施:
我使用OrientationEventListener
得到方向改变。我得到的数据如下所示:
01-21 18:20:51.783 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 300
01-21 18:20:51.848 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 289
01-21 18:20:51.912 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 283
01-21 18:20:52.042 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 278
01-21 18:20:52.109 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 272
01-21 18:20:52.173 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 266
01-21 18:20:52.237 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 261
01-21 18:20:52.302 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 255
01-21 18:20:52.366 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 252
01-21 18:20:52.430 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 248
01-21 18:20:52.560 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 246
01-21 18:20:52.690 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 248
01-21 18:20:52.755 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 251
01-21 18:20:52.819 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 254
01-21 18:20:52.883 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 258
01-21 18:20:52.949 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 260
01-21 18:20:53.016 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 264
01-21 18:20:53.079 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 267
01-21 18:20:53.145 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 274
01-21 18:20:53.208 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 277
01-21 18:20:53.273 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 281
01-21 18:20:53.337 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 284
01-21 18:20:53.403 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 289
01-21 18:20:53.467 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 293
01-21 18:20:53.532 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 298
01-21 18:20:53.855 28956-28956/com.myapp.test D/DeviceOrientationManager: .onOrientationChanged() - entered - 295
从这些数据中可以看出,我得到一个新的方向时没有一致性。另一个问题是,这种方向可以“跳过”一些步骤并跳跃任何程度。
经过一番计算,由我多么需要旋转我行决定,我使用旋转如下:
mLine.animate().setInterpolator(new LinearInterpolator()).rotation(
degrees).setDuration(60);
而这个工程确定为在视图做动画()让我取消以前动画并从同一点恢复到新的旋转值。然而这条线感觉有点颤抖和呆滞。如果我慢慢旋转设备,线条看起来不错,但是如果我旋转得更有力,它会稍微延迟一点。我认为这与我设置的旋转持续时间有关,手机旋转速度越快应该会降低我用于动画的持续时间。但是,我不确定如何计算以及所有我已经尝试过,只会让情况变得更糟。