2014-03-06 43 views
0

我已經創建了一個擴展ImageButton的自定義視圖類。我這樣做是因爲這個新的按鈕類允許我做一些動畫。如何正確覆蓋setImageResource,使其保持ImageButton的旋轉?

我遇到的實際問題是:當我點擊按鈕時,我希望它改變它的圖像可繪製。但是,當我設置一個新的形象像這樣

private void setCustomButtonIcon() { 
    if (mEnabled) { 
     myCustomButton.setImageResource(R.drawable.mybutton_off); 
    } else { 
     myCustomButton.setImageResource(R.drawable.mybutton_on); 
    } 
} 

然後旋轉,它有,因爲它可能已經在動畫中旋轉,不保留。

現在,顯而易見的想法是在我的自定義按鈕類中重寫setImageResource。我該怎麼做才能保證按鈕的旋轉?

+0

使用矩陣縮放類型 – pskink

+0

好吧,我該做什麼? – user2426316

+0

調用getImageMatrix(),然後旋轉返回的矩陣 – pskink

回答

1

我覺得你的問題與另一個問題:

最有可能的,你正在使用的動畫類的動畫。 所以你可能使用的RotationAnimation超,不喜歡的東西

RotateAnimation animation = new RotateAnimation(
    fromDegrees, toDegress, pivotX, pivotY); 

,並應用了動畫自定義按鈕。

但事實證明,這個只有動畫您的按鈕的位圖表示。換句話說,實際的按鈕/視圖不會旋轉並保持在其方向上。

因此,每次調用onDraw()時,就像點擊按鈕時發生的那樣,將會「重置」按鈕的外觀。

所以,你可能想要使用的是一個ObjectAnimator。這將動畫整個視圖並解決您的問題,同時保留對象的狀態。

您可以使用動畫就是這樣的,例如:

ObjectAnimator.ofFloat(myButton, "rotation", fromDegrees, -toDegrees) 
      .setDuration(animationDuration) 
      .start(); 

注意ObjectAnimator在API 11中添加所以,如果你是針對舊版本,那麼你應該用傑克Whartons nineoldandroids庫。 (下載.jar文件並將其添加到您項目中的libs文件夾中。)