2012-04-18 9 views
11

Ich werde das Bild in meiner App drehen. Alles funktioniert gut mit der Rotation. Aber während die Rotationsanimation beendet wird, kehrt das Bild zu seiner vorherigen Position zurück. Ich möchte, dass das Bild in diesem gedrehten Zustand bleibt und nicht in seinen realen Zustand zurückkehrt.Android: Drehen Animation kehrt in den realen Zustand zurück, nachdem die Animation beendet wurde?

Also, wie man es möglich macht? das Bild drehen ich unten Code verwende:

<?xml version="1.0" encoding="utf-8"?> 

<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:fromDegrees="0" 
    android:toDegrees="30" 
    android:duration="2000"> 

</rotate> 

und an die ImgeView wie die Anwendung:

myImageView.startAnimation(rotateRight); 

Also, hilf mir in Bezug auf diese.

Antwort

24

Siehe How can I animate a view in Android and have it stay in the new position/size?

Im Inneren des <set Tag, In der Regel

android:fillAfter="true" 
android:fillEnabled="true" 

verwenden, Animation, nicht die tatsächlichen Eigenschaften der Ansicht ändern, es belebt es nur. Wenn Sie die tatsächlichen Eigenschaften ändern möchten, verwenden Sie den Animationslistener und hören Sie auf onAnimationEnd, und nehmen Sie die Änderungen selbst vor.

+0

OK lassen Sie mich es versuchen. –

+0

Ich denke seine Arbeit. –

+1

Dieses Attribut wird nicht benötigt: android: fillEnabled = "true". Dies ist für dieses Attribut erforderlich: android: fillBefore. Schau dir das an: https://developer.android.com/reference/android/view/animation/Animation.html#attr_android:fillAfter. – Arash

2

zuerst eine Instanz der Animation erhalten

Animation anim = AnimationUtils.loadAnimation(context, R.anim.animation); 

"R.anim.animation" verwendet bezieht sich auf alles, was Ihre Animation ist.

Setzen Sie einen Animations-Listener auf diese Animation mit.

anim.setAnimationListener 

Machen Sie die Ansicht in der onAnimationCompleted() - Methode von AnimationsListener sichtbar.

Dies sollte funktionieren.

2

setFillAfter und setFillEnable ist die Antwort, die Sie brauchen.

Verwandte Themen