Android中的三种动画

Android动画一之帧动画frame

       即就是连续播放一张一张的图片,形成的动画

     代码:  

         在res目录下创建一个drawable文件夹 , 将需要播放的图片放到里面 , 再创建一个anim.xml文件


        
        
        
        
        
        
        
        
        
        

 动画使用

ImageView rocketImage = (ImageView) findViewById(R.id.iv);
//给iv设置背景图片资源
rocketImage.setBackgroundResource(R.drawable.anim);
//获取iv上面的图片资源
AnimationDrawable rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
//开始播放动画
rocketAnimation.start();

Android动画二之补间动画tween 

           即就是从开始状态到结束状态的过渡动画

    1.位移

 public void translate(View v) {
        /*
         * 参数1,参数3,参数5,参数7: 设置参照点的方式(相对自己)Animation.RELATIVE_TO_SELF
         * 参数2:x轴起始移动的位置 (0表示原图位置左上角x轴的坐标)
         * 参数4:x轴停止移动的位置(2表示移动原图宽度的两倍)
         * 参数6:y轴起始移动的位置 (0表示原图位置左上角y轴的坐标)
         * 参数8:y轴停止移动的位置(2表示移动原图高度的两倍)
         */
        TranslateAnimation tras = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2,
                Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2);
        // 设置显示时间长度
        tras.setDuration(1000);
        // 设置重复次数
        tras.setRepeatCount(2);
        // 设置动画重复的模式
        tras.setRepeatMode(Animation.REVERSE);
        //停止在结束状态
        tras.setFillAfter(true);
        //开始动画
        mImageView.startAnimation(tras);
    }

    2.旋转

public void rotate(View v) {
        /*
         * 参数1:旋转的起始角度
         * 参数2:旋转的终止角度
         * 参数3:旋转中心的x轴取值参照方式
         * 参数4:中心点x轴的取值(0.5f表示相对与原图的0.5倍)
         * 参数5:旋转中心的y轴取值参照方式
         * 参数6:中心点y轴的取值(0.5f表示相对与原图的0.5倍)
         */
        RotateAnimation rotate = new RotateAnimation(
                360, 0,Animation.RELATIVE_TO_SELF, 
                0.5f, Animation.RELATIVE_TO_SELF,0.5f);
        // 设置显示时间长度
        rotate.setDuration(2000);
        // 设置重复次数
        rotate.setRepeatCount(2);
        // 设置动画重复的模式
        rotate.setRepeatMode(Animation.REVERSE);
        // 在ImageView上播放动画
        mImageView.startAnimation(rotate);
    }

   3.缩放

 public void scale(View v) {
        /*
         * 参数1:x方向起始大小(1f表示原图大小)
         * 参数2:x方向终止大小(0.2f表示原图的0.2倍)
         * 参数3:y方向起始大小(1f表示原图大小)
         * 参数4:y方向终止大小(0.2f表示原图的0.2倍)
         * 参数5:缩放中心点x轴取值的参照方式
         * 参数6: 中心点x轴的取值(0.5f表示相对与原图的0.5倍)
         * 参数7:缩放中心点y轴取值参照方式
         * 参数8:中心点y轴的取值(0.5f表示相对与原图的0.5倍)
         */
        ScaleAnimation rotate = new ScaleAnimation(
                4f, 0.2f, 4f, 0.2f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        // 设置显示时间长度
        rotate.setDuration(2000);
        // 设置重复次数
        rotate.setRepeatCount(2);
        // 设置动画重复的模式
        rotate.setRepeatMode(Animation.RESTART);
        // 在ImageView上播放动画
        mImageView.startAnimation(rotate);
    }

4.透明度

public void alpha(View v){
        /*
         * 第一个参数fromAlpha:动画起始时的透明度
         * 第二个参数toAlpha: 动画结束时的透明度
         */
        Animation alpha = new AlphaAnimation(0f, 1f);
        // 设置显示时间长度
        alpha.setDuration(2000);
        // 设置重复次数
        alpha.setRepeatCount(2);
        // 设置动画重复的模式
        alpha.setRepeatMode(Animation.REVERSE);
        // 在ImageView上播放动画
        mImageView.startAnimation(alpha);
    }

 Android动画三之属性动画(在3.0版本以后引入)

            为什么要使用属性动画?

                  因为进行运动时改变了图片的坐标,需要获取图片的当前的坐标或者需要点击当前的图片,所有要使用属性动画

 public class MainActivity extends Activity {
        private ImageView mImageView;
        private ObjectAnimator objectAnimator4;
        private ObjectAnimator objectAnimator3;
        private ObjectAnimator objectAnimator2;
        private ObjectAnimator objectAnimator1;

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mImageView = (ImageView) findViewById(R.id.iv);
        }

        // 位移
        public voidtranslate(View v) {
            objectAnimator1 = ObjectAnimator.ofFloat(mImageView, "translationY", 0, 80, 20, 90, 100);
            // 动画播放时长
            objectAnimator1.setDuration(2000);
            // 动画重复的次数
            objectAnimator1.setRepeatCount(2);
            // 动画播放模式
            objectAnimator1.setRepeatMode(ObjectAnimator.REVERSE);
            // 开始播放动画
            objectAnimator1.start();
        }

        // 透明度
        public void alpha(View v) {
            objectAnimator2 = ObjectAnimator.ofFloat(mImageView, "alpha", 0, 1, 0.5f, 0.1f, 1);
            // 动画播放时长
            objectAnimator1.setDuration(2000);
            // 动画重复的次数
            objectAnimator1.setRepeatCount(2);
            // 动画播放模式
            objectAnimator1.setRepeatMode(ObjectAnimator.REVERSE);
            // 开始播放动画
            objectAnimator2.start();
        }

        // 缩放
        public void scale(View v) {
            objectAnimator3 = ObjectAnimator.ofFloat(mImageView, "scaleX", 1, 0, 0.5f, 2);
            // 动画播放时长
            objectAnimator1.setDuration(2000);
            // 动画重复的次数
            objectAnimator1.setRepeatCount(2);
            // 动画播放模式
            objectAnimator1.setRepeatMode(ObjectAnimator.REVERSE);
            // 开始播放动画
            objectAnimator3.start();
        }

        // 旋转
        public voidrotate(View v) {
            objectAnimator4 = ObjectAnimator.ofFloat(mImageView, "rotation", 45, 90, 180);
            // 动画播放时长
            objectAnimator4.setDuration(3000);
            // 动画重复的次数
            objectAnimator4.setRepeatCount(2);
            // 动画播放模式
            objectAnimator4.setRepeatMode(ObjectAnimator.REVERSE);
            // 开始播放动画
            objectAnimator4.start();
        }

        // 动画合集
        public void fly(View v) {
            AnimatorSet as = new AnimatorSet();
            // 一个装逼,一个飞 顺序的播放一个动画
            // as.playSequentially(objectAnimator1,objectAnimator2,objectAnimator3,objectAnimator4);
            // 一起装逼,一起飞
            as.playTogether(objectAnimator1, objectAnimator2, objectAnimator3, objectAnimator4);
            as.setDuration(2000);
            as.setTarget(mImageView);
            as.start();
        }
    }

 特别注意:

       当我们执行动画结束之后,如果我们设置啦setFillAfter为true时,动画执行完后,设置其属性的隐藏与显示都是无效的,,原因是setFillAfter为true是让其属性保持在最后一帧,如果要让setVisibily有效,那么就需要将其动画清除掉,即就是调用clearAnimation()方法清除掉动画;

 

你可能感兴趣的:(动画)