2012-10-14 13 views
17

Próbuję zrobić animację obracającego się obrazu. Muszę obracać ikonę wokół sama, tak jak w pasku postępu, ale to, co dostaję, to obraz obracający się wokół koła. Oto mój kod animacjiObracanie animacji 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" 
/> 

Gdzie jestem będzie niewłaściwy tutaj? Dzięki

Odpowiedz

5

Cóż mam gdzie się myliłem. Podarowałem obraz, który za każdym razem, gdy się obracał, trochę się odsunął. W każdym razie usunąłem obicie i teraz działa dobrze.

59

Jest to kod źródłowy main.xml układ:

<?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> 

Aby zaimplementować animację obrotu, możemy zdefiniować animację przez XML lub kodu Java. Jeśli chcemy napisać animację w xml, musimy stworzyć plik animacji xml w folderze/res/anim. Tutaj możemy utworzyć plik XML o nazwie 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> 

a to mój aktywny:

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

Dziękuję. Próbowałem dodać scaletype do obrazu i nadal to nie pomogło. – orelzion

+0

Dziękuję, to działa! – validcat

+1

To powinna być zaakceptowana odpowiedź! – Machado

27

Można spróbować z następującego kodu, zamiast robić to w 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

wiesz, jak uniknąć pauzy (przeciągnięcia) po zakończeniu pętli i przed jej powtórzeniem? – portfoliobuilder

+6

Spróbuj dodać polecenie rotate.setInterpolator (new LinearInterpolator()); –

+0

Dziękuję człowieku, zadziałało! – Recomer

0

dodać następujący xml w folderze animacji

<?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> 

Nadzieja to pomoże ..

, aby uzyskać więcej informacji. http://www.blazin.in/2013/09/simple-rotate-animation-in-android.html