7

androidで継続的にループしてimageviewを回転させたいコードrotateは設定されたリピートモードで完全に機能していますリピートモードを設定した場合リピートアニメーションは機能しませんが、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の使用はお勧めしません。

  • アニメーション
  • AnimationUtils
  • アニメーター
  • AnimatorInflater
  • AnimatorListener
  • AnimatorListenerAdapter
于 2013-07-25T08:49:19.007 に答える