5

我想在設備方向更改時旋轉ImageButton。它應該旋轉90,180,270和360度的角度,其相對佈局應保持穩定,只有按鈕移動。如何才能做到這一點?我做了一些研究,但沒有發現可以幫助我的任何事情。如何在方向改變時旋轉按鈕而不旋轉佈局?

+0

您必須將任務分解爲碎片:1停止旋轉活動的重新創建。 2.捕捉旋轉。 3.視圖的旋轉....這些片斷中的每一個都已經有了答案,所以在這裏......很難相信你沒有找到任何東西...... – Selvin

+0

我不知道如何劃分我的問題到這些片斷。我是Android和Java的新手。我仍然有問題,因爲我的活動方向是固定的,我必須用加速度計檢測方向,不知道如何去做。 –

回答

2

您可以通過重寫這樣檢測的方向變化:

public void rotateView(View view) { 
    Button button = (Button) view.findViewById(R.id.some_button); 
    RotateAnimation rotateAnimation = new RotateAnimation(0, 360); 
    rotateAnimation.setDuration(2000); 
    button.startAnimation(rotateAnimation); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    //call your rotate method here 
} 

然後,一旦你檢測取向變化時,你可以在這樣一個按鈕進行動畫旋轉

您可以在構造函數RotateAnimation中設置開始和結束角度,然後設置動畫應持續的時間(以毫秒爲單位)。然後,只需在要製作動畫的視圖上調用startAnimation()即可。

+0

謝謝@drschultz,你的回答很好,問題是我的活動方向是固定的,onConfigurationChanged總是給出相同的結果。如果我知道如何解決這個問題,我會說。有關如何使用SensorEventListener檢測軸x和y方向的任何想法? –

+1

如果您的顯示方向被鎖定並且無法旋轉,那麼很遺憾,您需要使用傳感器數據計算自己的旋轉值。這是事情變得相當複雜的地方。你可以在這裏閱讀關於[Android傳感器的文檔](http://developer.android.com/guide/topics/sensors/sensors_overview.html),並看到一些代碼示例,你可以找到堆棧溢出的一些很好的答案像[這裏這個問題](http://stackoverflow.com/questions/27106607/get-rotation-and-display-in-degrees)。但是如果你仍然需要傳感器的幫助,我會提出一個新的問題。 – NoChinDeluxe

+0

至於這個問題,我會懇請你接受我的回答,因爲它確實回答你原來的問題(並且可能在將來也會用類似的問題幫助其他人)。然後,如果您需要關於如何實現傳感器數據的幫助,則可以打開一個新問題。 – NoChinDeluxe