我想通過實現SensorEventListener來檢測設備的屏幕方向,因爲它的當前屏幕方向默認設置爲縱向。我需要這樣做,因爲我的佈局包含一些按鈕,它們應該獨立於其佈局進行旋轉,唯一的方法就是通過覆蓋onConfigurationChanged並將相應的動畫添加到每個屏幕方向。我不認爲OrientationEventListener可以工作,因爲設置的方向固定爲縱向。那麼如何從傳感器本身獲取屏幕方向或角度旋轉?如何使用SensorEventListener檢測設備方向?
1
A
回答
2
即使在固定方向下,OrientationEventListener也可以工作;見https://stackoverflow.com/a/8260007/1382108。它根據文檔監控傳感器。 說你定義了以下常量:
private static final int THRESHOLD = 40;
public static final int PORTRAIT = 0;
public static final int LANDSCAPE = 270;
public static final int REVERSE_PORTRAIT = 180;
public static final int REVERSE_LANDSCAPE = 90;
private int lastRotatedTo = 0;
的數字對應OrientationEventListener回報什麼,所以如果你有一個自然景觀設備(平板電腦),你必須考慮到這一點,看到How to check device natural (default) orientation on Android (i.e. get landscape for e.g., Motorola Charm or Flipout)。
@Override
public void onOrientationChanged(int orientation) {
int newRotateTo = lastRotatedTo;
if(orientation >= 360 + PORTRAIT - THRESHOLD && orientation < 360 ||
orientation >= 0 && orientation <= PORTRAIT + THRESHOLD)
newRotateTo = 0;
else if(orientation >= LANDSCAPE - THRESHOLD && orientation <= LANDSCAPE + THRESHOLD)
newRotateTo = 90;
else if(orientation >= REVERSE_PORTRAIT - THRESHOLD && orientation <= REVERSE_PORTRAIT + THRESHOLD)
newRotateTo = 180;
else if(orientation >= REVERSE_LANDSCAPE - THRESHOLD && orientation <= REVERSE_LANDSCAPE + THRESHOLD)
newRotateTo = -90;
if(newRotateTo != lastRotatedTo) {
rotateButtons(lastRotatedTo, newRotateTo);
lastRotatedTo = newRotateTo;
}
}
的rotateButtons功能是一樣的東西:
public void rotateButtons(int from, int to) {
int buttons[] = {R.id.buttonA, R.id.buttonB};
for(int i = 0; i < buttons.length; i++) {
RotateAnimation rotateAnimation = new RotateAnimation(from, to, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setDuration(200);
rotateAnimation.setFillAfter(true);
View v = findViewById(buttons[i]);
if(v != null) {
v.startAnimation(rotateAnimation);
}
}
}
相關問題
- 1. 如何使用JavaScript檢測設備方向?
- 2. 如何使用CSS媒體查詢檢測設備方向?
- 3. 如何檢測設備方向與界面方向不同?
- 4. 如何檢測設備是否朝向特定點方向
- 5. 如何檢測設備是否指向某個方向?
- 6. CSS3:爲iPhone檢測設備方向
- 7. 如何檢查設備的方向?
- 8. 在Android中使用ACCELEROMETER檢測設備移動方向
- 9. 在Android設備上使用javascript檢測方向
- 10. 使用android檢測設備方向變化:screenOrientation
- 11. 儘管鎖定顯示方向,如何檢測設備旋轉?
- 12. iOS 8在應用程序啓動時檢測設備方向
- 13. 如何檢測使用谷歌方向時的方向API
- 14. 檢測設備向前移動
- 15. SensorEventListener不再在Android 2.3.3中檢測到
- 16. 使用JavaScript檢測移動設備
- 17. Silverlight檢測設備
- 18. 檢測Android設備
- 19. 如何檢測是否是iOS設備並重定向?
- 20. 在Safari中檢測iOS上的初始設備方向
- 21. 檢測移動設備和重定向的最佳方法
- 22. 在科爾多瓦檢測設備方向
- 23. 從加速計數據中檢測設備運動方向?
- 24. 如何在LWUIT上檢測j2me移動設備的屏幕方向?
- 25. 如何檢測設備的移動?
- 26. Robovm/LibGDX - 如何檢測設備系列?
- 27. 如何檢測設備中的A-GPS?
- 28. 如何檢測捕獲設備的設備名稱?
- 29. Xamarin表單 - 如何檢測設備是否是觸摸設備?
- 30. 使用UINavigationController的設備方向
見我的答案在http://stackoverflow.com/questions/32826227/how-to-determine-device-orientation-from-the-傳感器/ 32837770#32837770。 –
這不是我所需要的。我需要檢測設備動作以根據它旋轉按鈕。佈局保持原樣。 –
你的設備動作是什麼意思?如果設備不平坦,那麼您可以使用上面的鏈接來獲取角度,這將告訴您設備屏幕處於何種方向。您可以通過不將該活動設置爲縱向模式進行測試,然後旋轉屏幕以查看以何種角度它會翻轉到風景。它可能取決於設備。 –