我在我的應用程序中做了一個小實驗,我試圖繪製一條線來移動/旋轉,以便它始終與地面平行。因此,例如,如果電話傾斜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);
而這個工程確定爲在視圖做動畫()讓我取消以前動畫並從同一點恢復到新的旋轉值。然而這條線感覺有點顫抖和呆滯。如果我慢慢旋轉設備,線條看起來不錯,但是如果我旋轉得更有力,它會稍微延遲一點。我認爲這與我設置的旋轉持續時間有關,手機旋轉速度越快應該會降低我用於動畫的持續時間。但是,我不確定如何計算以及所有我已經嘗試過,只會讓情況變得更糟。