4种补间动画

先确定初始和终止位置,然后中间的过程为补间动画的动画效果
补间动画分为四种:
1、AlphaAnimation 透明度动画
2、ScaleAnimation 缩放动画
3、TranslateAnimation 平移动画
4、RotateAnimation 旋转动画
①静态实现:
1.res/anim在此文件夹中创建xml资源文件
2.创建对应动画效果的节点,例如旋转动画节点,同时设置该动画的属性(开始位置、结束位置、一次播放的时间、播放次数、播放模式等)
3.使用对应的动画类,通过AnimationUtils.loadAnimation(context,动画的资源文件)
4.通过动画类对象调用start()方法
5.把该动画类的对象绑定在控件(不仅限于ImageView也可以是Button等)上
②动态实现:
1.创建对应的动画类,使用new的方式。通过构造方法,把该动画的初始位置和终止位置确定出来
2.通过动画类的对象设置属性(一次播放的时间、播放次数、播放模式等)
3.调用start();启动动画
4.把该动画绑定在控件上
注意:补间动画要先启动动画,再进行绑定
③组合补间动画
1.通过xml资源文件把多个动画节点放在节点中
2.在动画的节点里,只设置动画的开始和终止位置;重复次数,重复模式和播放时间等属性在set节点中设置
3.使用Animation类的对象来加载组合补间动画
4.之后操作同静态补间动画使用
④补间动画应用
activity跳转添加动画效果
1.overridePendingTransition(“进入动画”,“退出动画”);
2.写在startActivity和finish这两个方法的下面
3.onKeyDown()监听手机按键方法
4.keycode参数可以判断当前按下的是什么按键
一、AlphaAnimation
常用属性:
duration动画的时间,以毫秒为单位
fillAfter动画完成之后的状态,true为保持结束的状态,false为回到初始状态
repeatCount重复次数,可以填数字,也可以填infinite表示无限
repeatMode重复的模式,restart表示重新开始,reverse表示往复循环
interpolator播放方式,匀速,变速

实现方式:
代码实现

   /**
     * 代码实现透明动画
     */
    private void startAlpha2(){
        AlphaAnimation animation = new AlphaAnimation(1,0);
        animation.setDuration(2000);
        animation.setRepeatCount(1000000);
        animation.start();
        iv6.setAnimation(animation);
    }
    然后调用startAlpha2()即可

XML实现:
1.首先在res下建一个文件夹,这里我们命名为anim
2.在anim文件夹下新建一个alpha.xml文件

<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromAlpha="1"
    android:toAlpha="0"  //透明度由1-->0
    android:repeatCount="10000"
    >
</alpha>

3.然后在Activity里写一个方法找到xml文件

 /**
     * XML实现透明度动画
     * @param iv
     */
    private void startAlpha(ImageView iv) {
        AlphaAnimation animation = (AlphaAnimation) AnimationUtils.loadAnimation(this,R.anim.alpha);
        //这里注意start要在设置属性的前面
        animation.start();
        iv.setAnimation(animation);
    }

4.调用时可以用startAlpha(imageview);
二、ScaleAnimation
代码实现

   /**
     * 代码实现缩放
     */
    private void startScale1(ImageView iv){
        ScaleAnimation animation = new ScaleAnimation(1f, 0.2f,1f,0.2f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        //设置动画执行的次数
        animation.setRepeatCount(1000000);
        //  设置动画执行的时间
        animation.setDuration(1000);
        //  设置动画执行的模式:Animation.REVERSE往返,Animation.RESTART重复
        animation.setRepeatMode(Animation.REVERSE);
        animation.start();
        //让iv控件实现动画效果
        iv.setAnimation(animation);
    }

    调用的时候使用startScale1(imageview)调用即可

XML实现:
1.在anim文件夹下建一个scale.xml文件

<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "2000"
    //开始缩放的坐标
    android:fromXScale="0"
    android:fromYScale="0"
    //缩放的中心坐标
    android:pivotX="50%"
    android:pivotY="50%"
    //结束的坐标
    android:toXScale="100%"
    android:toYScale="100%"
    //次数
    android:repeatCount="1000"
    ></scale>

2.Activity里调用

   /**
     * XML实现缩放
     */
private void startScale2(){
    ScaleAnimation animation = (ScaleAnimation) AnimationUtils.loadAnimation(this,R.anim.scale);
    animation.start();
    iv8.setAnimation(animation);
}

三、TranslateAnimation
代码实现

   /**
     * 动态实现平移动画
     */
    private void statTweenTran1(ImageView iv) {
        /*
        通过查看TranslateAnimation构造方法填写参数
        其中fromXType:X坐标起始位置的类型(1.相对自己  2.相对父布局  3.绝对位置)
        fromXValue:X坐标起始位置的值
        以下同理。
         */
        TranslateAnimation animation = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF,
                0f,
                Animation.RELATIVE_TO_SELF,
                2f,
                Animation.RELATIVE_TO_SELF,
                0f,
                Animation.RELATIVE_TO_SELF,
                4f);
        //设置动画执行的次数
        animation.setRepeatCount(1000000);
        //  设置动画执行的时间
        animation.setDuration(1000);
        //  设置动画执行的模式:Animation.REVERSE往返,Animation.RESTART重复
        animation.setRepeatMode(Animation.REVERSE);
        animation.start();
        //让iv控件实现动画效果
        iv.setAnimation(animation);
    }

XML实现
1.在anim下新建xml文件translate.xml

<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:toXDelta="200%"
    android:fromYDelta="0"
    android:toYDelta="0"
    android:duration="2000"
    android:repeatCount="infinite"
    android:repeatMode="reverse"
    />
    

2.Activity建方法调用

   /**
     * 使用xml
     * 开始一个平移动画
     * 和帧动画的区别:帧动画要先绑定控件,再start;补间动画要先启动,再绑定
     */
    private void startTweenTran(ImageView iv) {
//        1.通过引入xml文件的方式加载一个动画
        TranslateAnimation animation = (TranslateAnimation) AnimationUtils.loadAnimation(this, R.anim.translate);
//      让动画动起来(帧动画是在最后一行start,补间动画写在设置之前)
        animation.start();
//        把平移动画和iv动画进行绑定
        iv.setAnimation(animation);

    }

四、RotateAnimation
XML实现
1.在anim下新建rotate.xml文件
2.在Activity里调用

   /**
     * 使用资源文件的方式,实现旋转动画 并启动
     * @param iv
     */
    private void startRotateAnim(ImageView iv) {
//        把旋转动画的资源文件,转换成旋转动画对象
        RotateAnimation animation = (RotateAnimation) AnimationUtils.loadAnimation(this, R.anim.rotate);
        animation.start();
        iv.setAnimation(animation);
    }

五、多种动画组合
1.需要在新建的xml文件里选择set节点,如下四种动画的组合

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fillAfter="true"
    android:repeatMode="restart">
    <scale
        android:duration="2000"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="1200"
        android:toXScale="100%"
        android:toYScale="100%" />
    <alpha
        android:duration="3000"
        android:fromAlpha="1"
        android:repeatCount="10000"
        android:toAlpha="0" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="1000"
        android:toDegrees="360" />
    <translate
        android:fromXDelta="0"
        android:repeatCount="1000"
        android:toXDelta="200%" />

set>

2.Activity里的调用实现

   /**
     * 使用xml资源文件实现
     * 旋转+平移组合动画,并启动
     */
    private void startAnim(ImageView iv) {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate_translate);
        animation.start();
        iv.setAnimation(animation);
    }

六、Activity跳转动画实现
1.在anim下新建两个xml文件,一个是in的一个是out的。这里以scale为例
in

<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "2000"
    android:fromXScale="0"
    android:fromYScale="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="100%"
    android:toYScale="100%"/>

out

<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "2000"
    android:fromXScale="100%"
    android:fromYScale="100%"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0"
    android:toYScale="0"
    />

2.这里我们使用系统的返回按键的监听

/**
     * 这个是响应手机按键按下时的方法
     *
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
//        判断到当前点击的按键为返回键
//        既然自己判断了返回键的监听事件,就要自己来实现返回的功能
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
            overridePendingTransition(R.anim.trans_back_in, R.anim.tran_back_out);
        }
        return super.onKeyDown(keyCode, event);
    }

3.在另一处跳转也需要添加

//                添加Activity跳转时的动画效果
                overridePendingTransition(R.anim.trans_back_in,R.anim.tran_back_out);

你可能感兴趣的:(笔记)