2012-01-13 50 views
1

我有一個簡單的RotateAnimation無限期地動畫ImageView,直到我停止它。我有動畫設置如下:防止旋轉動畫取消時重置

Animation spin = new RotateAnimation(0.0f, 1800.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
    spin.setInterpolator(new LinearInterpolator()); 
    spin.setRepeatCount(Animation.INFINITE); 
    spin.setDuration(5000); 
    imageView.setAnimation(spin); 

當我打電話imageView.cancelAnimation(),是否有可能對我來說,「凍結」的動畫就在它結束對任何幀(或它在任何角度),而不是它的重置到第一幀?

回答

0

您可能會更好地將圖像內容包裝在RotateDrawable中,並將其設置爲ImageView而不是使用動畫。您仍然可以通過使用簡單的處理程序重複調用setImageLevel()來調整旋轉角度,從而爲動畫的過渡設置動畫。

當需要凍結動畫時,只需停止發佈到Handler,圖像將保持其最後的設置值。如果你願意,你可以重新啓動帖子到Handler

另一種選擇是創建自定義ViewGroup並使用getChildStaticTransformation()將自定義轉換應用於兒童ImageView。您仍然可以手動處理動畫步驟,因此您可以隨時隨地開始/停止動畫,但Transformation是動畫系統用於動畫視圖的動畫,因此您可能會得到更接近該效果的結果。

HTH

+0

我猜這是有效的。唯一的問題是,當我嘗試將它們用作不確定的進度條時,RotateDrawable並不那麼流暢。你知道我可以如何提高幀速率或不確定進度條的速度嗎? – Brian 2012-01-13 06:03:05

+0

不公開。 'ProgressBar'使用'AnimatedRotateDrawable',它具有這些屬性,但是是一個隱藏類。我添加了另一個轉換視圖的選項。爲了獲得更加平滑的效果,您可能需要手動調用Interpolator上的方法,以便知道在每個步驟中需要調整多少動畫。 – Devunwired 2012-01-13 15:47:50

+0

有沒有使用RotateDrawable的例子?我無法在android SDK中找到任何內容。 – 2015-09-28 20:30:37

2

我有了越來越其確定的角度之後保持其旋轉位置的應用程序。我搜索了相當一段時間,最後發現調用setFillAfter()方法。這將停止重置的旋轉。

RotateAnimation rotate = new RotateAnimation(startingPoint, value, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
    image.setAnimation(rotate); 

    rotate.setDuration(ROTATION_INTERVAL); 
    rotate.setFillAfter(true);