2011-12-02 61 views
2

我編程式翻譯了一張圖片。後來,在我的代碼中,我試圖旋轉關於它自己中心的圖像。但是旋轉是在翻譯之前圍繞原始位置旋轉圖像。我已經註釋掉了代碼的翻譯部分,並且一切正常,圖像圍繞其中心旋轉。但是當我首先翻譯它時,旋轉不考慮新的位置。我需要做什麼?下面翻譯後無法使用

View v; 
animation anim = AnimationUtils.loadAnimation(getApplication(),R.anim.slide_in_up); 
v.setTranslationY(#); 
v.startAnimation(anim); 

XML:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<rotate 
    android:fromDegrees="-360.0" 
    android:toDegrees="0.0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="1000" /> 
</set> 

回答

0

答案是先旋轉圖像然後翻譯它。我是這樣做的,這就是爲什麼它不圍繞中心旋轉。

1

你可能會需要添加android:fillAfter="true"或代碼setFillAfter(boolean fillAfter)相當於進行轉型持續完成轉換後。

如果fillAfter爲true,則此動畫執行的轉換 將在完成時保留。如果未設置,則默認爲false。

//編輯:我最初並沒有讀到您正在使用API​​ Level 11+ setTranslationY方法。

設置此視圖相對於其頂部位置的垂直位置。 除了 對象的佈局放置它之外,這可以有效地定位對象後佈局。

我的猜測是佈局後定位不會影響動畫的所有依賴關係,例如,它並不等同於'fillAfter',因此你的結果並不符合你的期望。一個不太好的解決方法可能是放棄setTranslationY方法並用TranslationAnimation完成翻譯。通過將持續時間設置爲零,您可以模仿「即時」翻譯。我已經成功完成了翻譯後的動畫旋轉,所以使用這種方法你應該能夠得到你想要的結果...

+0

謝謝,但沒有。在動畫結束時,視圖位於正確的位置。但它圍繞原始座標旋轉,而不是由setTranslateY()產生的新位置旋轉。 setTranslateY()也可以工作,它會轉到正確的位置並在調用方法時持續存在 – JLK

+0

對不起,我最初誤解了您的問題的一部分。我更新了我的答案,並提出了一些可能值得研究的建議,以免找不到合適的解決方案。 –

0

這是9補丁算法的正常行爲。我找到了一種用畫布做到這一點的方法。 該算法的工作原理是這樣一種方式,即翻譯相對於旋轉軸發生。 實現此目的的步驟是在Android Studio中創建畫布自定義視圖。 您需要先使用畫布旋轉,然後設置可拉直畫布的drawable的邊界,然後才能正常翻譯。 我有一個開源的庫,演示了這一點。 你可以在這裏找到庫:https://bitbucket.org/warwick/hacergestov3 YouTube的演示在這裏:https://youtu.be/0CoX5WUL6_8 或下載庫演示應用程序:https://play.google.com/store/apps/details?id=com.WarwickWestonWright.HacerGestoV3Demo 或者您可以使用OpenGL ES來代替。