android 之动画

作者: 石头_起航 | 来源:发表于2018-07-02 16:57 被阅读40次

    动画:

    一、帧动画

    res\drawable

    Drawable动画

    使用的类:AnimationDrawable

    常用方法:

    start:启动

    stop:停止

    isRunning:是否正在运行

    将指定的一系列图片,按照顺序进行切换,类似Gif

    使用步骤:

    1、准备资源图片

    2、在res\drawable\下创建<animation-list>

    3、使用<item>进行图片显示顺序的设置和停留时间的设置

    4、在对应的ImageView中使用background引用刚刚的<animation-list>

    5、在对应的Activity中使用AnimationDrawable的start启动动画

    二、补间动画

    View动画

    res\anim

    使用的类:Animation和AnimationUtils

    通过设置图片的透明度、平移、缩放、旋转等实现动画的效果

    使用方式:

    1、XML方式

    使用步骤:

    1、在res文件夹下创建anim文件夹,用于存储动画效果

    2、在anim下创建对应的动画效果

    1、alpha:透明度

    常用属性:

    fromAlpha:起始的透明度

    toAlpha:终止的透明度

    duration:动画的持续时间,单位毫秒

    注:透明度范围:0.0-1.0,其中0.0完全透明、1.0完全显示

    2、rotate旋转

    常用属性:

    fromDegrees:起始角度

    toDegrees:终止角度

    pivotX:中心点的x坐标

    pivotY:中心点的y坐标

    repeatCount:重复的次数

    repeatMode:重复的模式

    interpolator:加速效果

    3、translate:平移

    常用属性:

    fromXDelta:设置起始的x坐标

    toXDelta:终止的x坐标

    fromYDelta:起始的y坐标

    toYDelta:终止的y坐标

    repeatCount:重复的次数

    repeatMode:重复的模式

    interpolator:加速效果

    4、scale:设置缩放效果

    常用属性:

    fromXScale:起始的x方向的缩放

    toXScale:结束的x方向的缩放

    fromYScale:起始的y方向的缩放

    toYScale:终止的y方向的缩放

    repeatCount:重复的次数

    repeatMode:重复的模式

    interpolator:加速效果

    5、set:组合动画

    常用属性:

    repeatCount:重复的次数

    repeatMode:重复的模式

    3、在对应的Activity中通过AnimationUtils.loadAnimation获取对应的动画对象

    4、找到对应的ImageView设置startAnimation对应的动画效果并启动

    注意:interpolator动画的加速效果

    常用的值:

    @android:anim/accelerate_decelerate_interpolator" 先加速后减速

    @android:anim/accelerate_interpolator 开始慢,结束快

    @android:anim/decelerate_interpolator 开始快,结束慢

    @android:anim/anticipate_interpolator 开始时会超出起始位置,再执行动画

    @android:anim/overshoot_interpolator 结束时会超出终止位置,再结束动画

    @android:anim/anticipate_overshoot_interpolator 开始和结束时都会超出一定距离

    @android:anim/bounce_interpolator 结束时,有反弹效果

    @android:anim/cycle_interpolator 动画按特定的次数执行多次,有振动效果

    @android:anim/linear_interpolator 均匀的速度执行动画

    2、JAVA方式

    常用的动画类:

    1、AlphaAnimation:透明度动画类

    构造方法:

    AlphaAnimation(float fromAlpha, float toAlpha)

    参数说明:

    fromAlpha:起始的透明度

    toAlpha:终止的透明度

    2、RotateAnimation:旋转动画类

    构造方法:

    RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

    参数说明:

    fromDegrees:起始的角度

    toDegrees:终止的角度

    pivotX:中心点的x坐标

    pivotY:中心点的y坐标

    3、TranslateAnimation:平移动画类

    构造方法:

    TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

    参数说明:

    fromXDelta:x方向起始位置

    toXDelta:x方向终止位置

    fromYDelta:y方向起始位置

    toYDelta:y方向终止位置

    4、ScaleAnimation:缩放动画类

    构造方法:

    ScaleAnimation(float fromX, float toX, float fromY, float toY)

    参数说明:

    fromX:x方向的起始缩放

    toX:x方向终止缩放

    fromY:y方向起始缩放

    toY:y方向终止缩放

    5、AnimationSet:组合动画类

    常用方法:

    addAnimation:添加动画效果

    三、属性动画

    res\animator

    2种方式:

    1、xml文件

    使用步骤:

    1、在res\animator文件夹

    2、创建对应的<objectAnimator>

    使用android:propretyName:用来标记哪种动画

    常用的值:

    alpha:透明度

    backgroundColor:背景色

    rotateX/Y:旋转

    scaleX/Y:缩放

    translationX/Y:移动

    注意:组合动画使用的<set>

    3、在对应的Activity中获取对应的动画并绑定控件且启动

    AnimatorInflater.loadAnimator:将指定的xml文件转换为动画对象

    setTarget:为指定的控件设置动画效果

    start:启动动画

    end:结束动画

    cancel:取消动画

    2、java方式

    1、ObjectAnimator:属性动画

    包括常用的:透明度、旋转、移动、缩放

    2、AnimatorSet:属性动画的组合动画

    playTogether:同时播放

    playSequentially:顺序播放

    play(动画).with/before/after:自定义播放

    addUpdateListener:监听属性动画的变化过程

    颜色资源:

    路径:res\values\colors

    <color >

    补间动画

    public class MainActivity extends Activity {

    private ImageView iv;

    //声明对应的补间动画对象

    private Animation animation;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    iv=(ImageView)findViewById(R.id.iv);

    }

    public void click(View view) {

    switch (view.getId()) {

    case R.id.tv_1://透明度动画

    //加载对应的透明度动画效果

    animation=AnimationUtils.loadAnimation(this, R.anim.my_alpha);

    break;

    case R.id.tv_2://旋转

    animation=AnimationUtils.loadAnimation(this, R.anim.my_rotate);

    break;

    case R.id.tv_3://移动

    animation=AnimationUtils.loadAnimation(this, R.anim.my_transalte);

    break;

    case R.id.tv_4://缩放

    animation=AnimationUtils.loadAnimation(this, R.anim.my_scale);

    break;

    case R.id.iv://组合动画

    //animation=AnimationUtils.loadAnimation(this, R.anim.my_set);

    AnimationSet as=new AnimationSet(true);

    as.addAnimation(animation);

    as.setDuration(3000);

    as.setRepeatCount(10);

    as.setRepeatMode(Animation.RESTART);

    as.setFillAfter(true);//设置动画结束时,是否

    //设置是否有动画效果

    as.setInterpolator(this, android.R.anim.fade_in);

    break;

    }

    //为动画设置监听事件

    animation.setAnimationListener(new AnimationListener() {

    //启动

    @Override

    public void onAnimationStart(Animation animation) {

    // TODO Auto-generated method stub

    Log.e("Animation", "onAnimationStart……");

    }

    //重复

    @Override

    public void onAnimationRepeat(Animation animation) {

    // TODO Auto-generated method stub

    Log.e("Animation", "onAnimationRepeat……");

    }

    //结束

    @Override

    public void onAnimationEnd(Animation animation) {

    // TODO Auto-generated method stub

    Log.e("Animation", "onAnimationEnd……");

    }

    });

    //开始执行动画

    iv.startAnimation(animation);

    }

    }

    xml

    <?xml version="1.0" encoding="UTF-8"?>

    <alpha android:duration="4000" android:toAlpha="1.0" android:fromAlpha="0.1" xmlns:android="http://schemas.android.com/apk/res/android"> </alpha>

    2

    <?xml version="1.0" encoding="UTF-8"?>

    <rotate android:repeatMode="reverse" android:repeatCount="10" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotY="50%" android:pivotX="50%" android:toDegrees="360" android:fromDegrees="0" android:duration="2000" xmlns:android="http://schemas.android.com/apk/res/android"> </rotate>

    3

    <?xml version="1.0" encoding="UTF-8"?>

    <scale android:interpolator="@android:anim/cycle_interpolator" android:repeatMode="restart" android:repeatCount="10" android:pivotY="50%" android:pivotX="50%" android:toYScale="6" android:fromYScale="0.1" android:toXScale="3" android:fromXScale="0.1" android:duration="3000" xmlns:android="http://schemas.android.com/apk/res/android"> </scale>

    4

    <?xml version="1.0" encoding="UTF-8"?>

    -<set android:repeatMode="reverse" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android"> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:toAlpha="1.0" android:fromAlpha="0.1" android:duration="2000"> </alpha> <rotate android:repeatMode="reverse" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:toDegrees="360" android:pivotY="50%" android:pivotX="50%" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromDegrees="0"> </rotate> <scale android:repeatMode="restart" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:pivotY="50%" android:pivotX="50%" android:interpolator="@android:anim/cycle_interpolator" android:toYScale="6" android:toXScale="3" android:fromYScale="0.1" android:fromXScale="0.1"> </scale> <translate android:repeatMode="reverse" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:interpolator="@android:anim/bounce_interpolator" android:toYDelta="0" android:toXDelta="200" android:fromYDelta="0" android:fromXDelta="0"> </translate> </set>

    6

    <?xml version="1.0" encoding="UTF-8"?>

    <translate android:interpolator="@android:anim/bounce_interpolator" android:repeatMode="reverse" android:repeatCount="10" android:toYDelta="400" android:fromYDelta="0" android:toXDelta="200" android:fromXDelta="0" android:duration="4000" xmlns:android="http://schemas.android.com/apk/res/android"> </translate>

    补间动画有一定的缺陷,按钮移动后点击事件依然在原来的位置,动画效果是通过一些列算法来实现的,所以后来出现属性动画,效果是真实控件的移动变幻。

    相关文章

      网友评论

        本文标题:android 之动画

        本文链接:https://www.haomeiwen.com/subject/nxpluftx.html