重用代码Android时的动画问题

时间:2014-04-22 06:21:45

标签: android animation android-animation

我有一个应用程序,我每4秒产生一个新的敌人。敌人用TranslateAnimation从右到左。此动画总共需要7秒。

我现在面临的问题是,当动画运行时,每当我产生一个新敌人时,动画就会停止,并开始为新敌人制作动画。

有没有办法使用相同的TranslateAnimation动画两个不同的对象?

以防万一,这是我的动画

        translate= new TranslateAnimation(
            Animation.ABSOLUTE, (float) 1.0,
            Animation.ABSOLUTE, (float) -4.0,
            Animation.ABSOLUTE,0,
            Animation.ABSOLUTE,0);

    translate.setDuration(10000);
    translate.setFillAfter(true);
    //newIV is the enemy's ImageView
    newIV.startAnimation(translate);

2 个答案:

答案 0 :(得分:2)

您可以像这样应用动画

xml文件夹

中制作动画anim
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
     <translate
        android:fromXDelta="100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="500" 
        />
   </set>

然后在课堂上编码

final Animation RightToLeft = AnimationUtils.loadAnimation(context,
                R.anim.right_to_left);


        ((ImageView)findViewById(R.id.yourImage))
                .startAnimation(RightToLeft);

希望它会有所帮助。

答案 1 :(得分:1)

您可以将相同的动画设置为相同position.try中的不同视图以使用animationLisener

    translate.setAnimationListener(new TranslateAnimation.AnimationListener() {                             @Override
        public void onAnimationStart(Animation animation) { }
            @Override
        public void onAnimationRepeat(Animation animation) { }
        @Override
        public void onAnimationEnd(Animation animation) 
        {
         animation.setFillAfter(false);
         RelativeLayout.LayoutParams params =(RelativeLayout.LayoutParams)mLogo.getLayoutParams();
         //Set your firest view layout or hide the previous newIV
        //This ll avoid filckering
         animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, 0.0f);
         animation.setDuration(1);
         ImageView mLogo = new ImageView(activity);// Second enemy as u said     

         animation = new TranslateAnimation(
        Animation.ABSOLUTE, (float) 1.0,
        Animation.ABSOLUTE, (float) -4.0,
        Animation.ABSOLUTE,0,
        Animation.ABSOLUTE,0);      
         mLogo.startAnimation(animation);mLogo.setLayoutParams(params);
         mLogo.clearAnimation();
         mLogo.startAnimation(animation);
            }
});

这个ll animate当第一个敌人结束时创建一个新的动画实例并使用。