7

我想在android上连续循环旋转imageview。我的代码旋转在没有设置重复模式的情况下工作得很好。如果我设置重复模式重复动画不起作用但是,imageview静态旋转一些角度,我想要循环旋转动画任何人都可以帮助我非常感谢!

这是动画xml

<?xml version="1.0" encoding="utf-8"?>
<rotate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromDegrees="45"
  android:toDegrees="45"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="100"
  android:startOffset="0"
/>

这是我的java类

import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class AnimationActivity extends Activity {
    /** Called when the activity is first created. */
    ImageView my_image;
    AnimationListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listener = new AnimationListener() {
            @Override public void onAnimationStart(Animation animation) {}
            @Override public void onAnimationRepeat(Animation animation) {}
            @Override
            public void onAnimationEnd(Animation animation) {
                System.out.println("End Animation!");
                //load_animations();
            }
        };

        my_image=(ImageView)findViewById(R.id.my_img);
        load_animations();



    }
    void load_animations()
    {
        new AnimationUtils();
        Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation);
        rotation.setRepeatCount(-1);
        rotation.setRepeatMode(2);
        rotation.setAnimationListener(listener);
        my_image.startAnimation(rotation);
    }

}

提前致谢!

4

2 回答 2

12

最后,我得到了解决方案尝试下面的 xml:

<?xml version="1.0" encoding="utf-8"?>
<rotate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromDegrees="0"
  android:toDegrees="360"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="2000"
  android:repeatMode="reverse"
  android:repeatCount="infinite"
  android:startOffset="0"
/>

这是我的课

import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class AnimationActivity extends Activity {
    /** Called when the activity is first created. */
    ImageView my_image;
    AnimationListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listener = new AnimationListener() {
            @Override public void onAnimationStart(Animation animation) {}
            @Override public void onAnimationRepeat(Animation animation) {}
            @Override
            public void onAnimationEnd(Animation animation) {
                System.out.println("End Animation!");
                //load_animations();
            }
        };

        my_image=(ImageView)findViewById(R.id.my_img);
        load_animations();



    }
    void load_animations()
    {
        new AnimationUtils();
        Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation);
        rotation.setAnimationListener(listener);
        my_image.startAnimation(rotation);
    }

}

那就是代码运行良好!

我的问题解决了!

于 2012-06-26T10:41:58.970 回答
0

在通过互联网的答案进行研究后,我找到了一个非常适合我的解决方案。(是的,repeatCount 和 repeatMode 与 animationSet 一起使用时非常错误)。

anim_rotate_fade.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:ordering="together" >

    <objectAnimator
        android:duration="3000"
        android:propertyName="rotation"
        android:repeatCount="1"
        android:valueTo="360"
        android:valueType="floatType" />

    <objectAnimator
        android:duration="3000"
        android:propertyName="alpha"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="0.0"
        android:valueTo="0.3"
        android:valueType="floatType" />

    <objectAnimator
        android:duration="3000"
        android:propertyName="y"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="380"
        android:valueTo="430"
        android:valueType="floatType" />

</set>

在活动中:(通过在动画结束后引入轻微延迟来解决它)。

ImageView starlightImageView = new ImageView(this);
starlightImageView.setImageResource(R.drawable.starlight);
final AnimatorSet animate = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.anim_rotate_fade);
AnimatorListenerAdapter animatorListener = new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        new Handler().postDelayed(new Runnable() {
            @Override public void run() {
                animate.start();
            }
        }, 1000);
    }
};
animate.setTarget(starlightImageView);
animate.addListener(animatorListener);

您想研究很多类,但目前我正在使用高度灵活的 objectAnimator。我不建议使用 Animation 或 AnimationUtils:

  • 动画
  • 动画工具
  • 动画师
  • AnimatorInflater
  • 动画监听器
  • AnimatorListenerAdapter
于 2013-07-25T08:49:19.007 回答