1

我想旋轉一個ImageButton 180度,所以它匹配反向縱向。當我按照與其他方向變化相同的方式進行時,結果是完美的,但不是動畫。如何從不同角度旋轉視圖?

public void onOrientationChanged(int DeviceAngle) { 
     float MyButtonCurrentAngle = MyButton.getRotation(); //Gets portrait rotation (0) 
      if(DeviceAngle > 350 || DeviceAngle < 10) { //Portrait 
       MyButton.animate().rotationBy(- MyButtonCurrentAngle).setDuration(100).start(); 
      } else if(DeviceAngle > 80 && DeviceAngle < 100) { //Reverse Landscape 
       MyButton.animate().rotationBy(-90 - MyButtonCurrentAngle).setDuration(100).start(); 
      } else if(DeviceAngle > 170 && DeviceAngle < 190) { //Reverse Portrait 
       MyButton.animate().rotationBy(180 - MyButtonCurrentAngle).setDuration(100).start(); 
      } else if(DeviceAngle > 260 && DeviceAngle < 280) { //Landscape 
       MyButton.animate().rotationBy(90 - MyButtonCurrentAngle).setDuration(100).start(); 
      }   

我認爲出現這種情況,因爲浮子MyButtonCurrentAngle獲取從DeviceAngle 350和10(0或360,縱向方向)之間myButton的旋轉角的值(0或不旋轉),並使用它作爲參考。

即使我仍然懷疑,我放棄了以前的情況。浮動似乎與其他方向很好地工作,我認爲問題是反向縱向方向的動畫。該按鈕不應該旋轉180度,而是90度或-90度。這是因爲無法通過任何橫向選項將設備從縱向旋轉到縱向縱向。 (無法直接將肖像旋轉到反轉肖像)。

經過許多不成功的嘗試後,我得出結論,我無法使用MyButton獲得的角度值,在按鈕旋轉後,檢測到的方向是橫向或反向橫向。我想過創建另一個浮動圖像來獲得反向肖像MyButton角度值,但是此活動的方向設置爲縱向,所以這沒有意義。

因此,我需要獲取MyButton的旋轉角度,然後將其作爲循環條件使用,並根據結果將其旋轉90度或-90度。這是我對這個問題的最新方法:

while (MyButtonCurrentAngle==90) { 
    if (DeviceAngle > 170 && DeviceAngle < 190) { 
     MyButton.animate().rotationBy(90 - MyButtonCurrentAngle).setDuration(100).start(); 
    } 
} 
while (MyButtonCurrentAngle==270) { 
    if (DeviceAngle > 170 && DeviceAngle < 190) { 
     MyButton.animate().rotationBy(-90 - MyButtonCurrentAngle).setDuration(100).start(); 
    } 
} 

基本上,這處理從橫向和反向景觀的設備方向來反轉縱向。這沒有觸發任何動畫,所以MyButtonCurrentAngle浮點角度值永不改變或無法檢測到?爲什麼if語句不能讀取它?我不知道,我想知道我做錯了什麼。提前致謝。

+0

發佈XML,什麼是'MyButtonCurrentAngle'和'ButtonsAngle' –

+0

確保代碼中的'ifs'可達。嘗試在'ifs'內打印一些日誌。 –

+0

MyButtonCurrentAngle是我的按鈕float的一個示例,它通過getRotation獲取當前的旋轉值。 ButtonsAngle是onOrientationChanged int,它們都不在xml文件中。一切正常,不會崩潰。問題是我想爲我的按鈕創建一個不同的動畫,從90到180以及從270到180.(換句話說,我希望從橫向到縱向的逆轉以及逆向橫向的逆轉,使縱向看起來和它的效果一樣好對應[人像])。 –

回答

1

解決方案:

OrientationEventListener OrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) { 
     static final int DELTA = 20; 

     @Override 
     public void onOrientationChanged(int Angle) { 
      float AngleDestination = ButtonDestination; 
      if (angle > 90 - DELTA && angle < 90 + DELTA) { 
       AngleDestination = -90; 
      } else if (Angle > 180 - DELTA && Angle < 180 + DELTA) { 
       AngleDestination = 180; 
      } else if (Angle > 270 - DELTA && Angle < 270 + DELTA) { 
       AngleDestination = 90; 
      } else if (Angle > 360 - DELTA || Angle < DELTA) { 
       AngleDestination = 0; 
      } 
      if (AngleDestination != ButtonDestination) { 
       ButtonDestination = AngleDestination; 
       MyButton.animate().rotation(ButtonDestination).setDuration(100).start(); 
      } 
     } 
    }; 
    orientationEventListener.enable(); 
} 
0

如果您發現此代碼正在運行(通過斷點調試或Logcat語句),請嘗試在UI線程上運行動畫。

YourActivity.runOnUiThread(new Runnable() { 
    public void run() 
     MyButton.animate().rotationBy(90 - MyButtonCurrentAngle).setDuration(100).start(); 
    } 
}); 

您可能還需要調用start。

+1

這將如何解決我的問題?其他動畫確實開始。問題是我無法檢查按鈕旋轉角度值並給出足夠的響應。 –

+0

所以我想我對這個問題感到困惑。重新閱讀 - 您試圖將圖像按鈕與屏幕方向無關地旋轉180度? – Austi01101110

+0

是的,我編輯它來更好地解釋自己。它不僅應該取決於方向(反向肖像),還應該取決於該方向。無論是風景,按鈕旋轉90度,或逆轉風景,其中它從原來的位置旋轉了-90度。 –