2012-10-14 277 views
17

我正在嘗試做一個旋轉圖像動畫。 我需要圍繞本身旋轉一個圖標,就像他們在進度條中做的一樣,但是我得到的是一個圍繞圓圈旋轉的圖像。 這是我的動畫代碼旋轉動畫android

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromDegrees="0" 
android:toDegrees="360" 
android:interpolator="@android:anim/linear_interpolator" 
android:pivotX="50%" 
android:pivotY="50%" 
android:duration="2500" 
android:repeatCount="infinite" 
android:repeatMode="restart" 
/> 

我在哪裏錯了? 感謝

回答

5

嗯,我得到了,我錯了。我給了我的圖像填充,使其每次旋轉時都會移動一點。 無論如何,我刪除了填充,現在它工作得很好。

59

這是佈局的main.xml的源代碼:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <Button 
     android:id="@+id/testButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="animationText" 
     android:onClick="AnimClick"/> 

    <ImageView 
     android:id="@+id/testImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:contentDescription="image_desc" 
     android:scaleType="fitCenter" 
     android:src="@drawable/cat2" /> 

</RelativeLayout> 

爲了實現旋轉動畫,我們可以通過XML或Java代碼定義動畫。如果我們想在xml中編寫動畫,我們需要在/ res/anim文件夾下創建一個動畫xml文件。在這裏,我們創建了一個名爲rotate_around_center_point.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false" > 

    <rotate 
     android:duration="2500" 
     android:interpolator="@android:anim/linear_interpolator" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:repeatCount="infinite" 
     android:repeatMode="restart" 
     android:toDegrees="360" /> 

</set> 

一個XML文件,這是我的活動:

public class MainActivity extends Activity implements OnClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button btn = (Button) findViewById(R.id.testButton); 
     btn.setOnClickListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     ImageView animationTarget = (ImageView) this.findViewById(R.id.testImage); 

     Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate_around_center_point); 
     animationTarget.startAnimation(animation); 

    } 


} 
+0

謝謝。我試圖將scaletype添加到圖像,但仍然沒有幫助。 – orelzion

+0

謝謝,它的作品! – validcat

+1

這應該是被接受的答案! – Machado

27

你可以嘗試用下面的代碼,而不是在XML做:

RotateAnimation rotate = new RotateAnimation(0, 360, 
     Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
     0.5f); 

rotate.setDuration(4000); 
rotate.setRepeatCount(Animation.INFINITE); 
yourView.setAnimation(rotate); 
+0

你知道如何避免在循環完成之後和重複之前暫停(停頓)? – portfoliobuilder

+6

嘗試添加rotate.setInterpolator(new LinearInterpolator()); –

+0

謝謝你,它的工作! – Recomer

0

添加下面的XML動畫文件夾

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false" 
    android:duration="4000" 
    android:fromdegrees="0" 
    android:pivotx="50%" 
    android:pivoty="50%" 
    android:todegrees="360" 
    android:toyscale="0.0"> 
</set> 

希望這將幫助你..

瞭解更多信息http://www.blazin.in/2013/09/simple-rotate-animation-in-android.html