博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Code-Snippet】Anim
阅读量:5957 次
发布时间:2019-06-19

本文共 4620 字,大约阅读时间需要 15 分钟。

总的来说,Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画; 传统动画又包括 帧动画(Frame Animation)和补间动画(Tweened Animation)。

1. View Animator

Animation类 是所有动画(scale、alpha、translate、rotate)的基类,这里以scale标签为例,讲解一下,Animation类所具有的属性及意义。

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。

分类

1.1 alpha 渐变透明度动画效果

  • android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
  • android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

Example:

复制代码
AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0.1f);复制代码

1.2 scale 渐变尺寸伸缩动画效果

XML参数说明:

  • android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
  • android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
  • android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
  • android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View(如果当前为按键点击来切换页面,则这个View是button)的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
  • android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样。 关于pivotX和pivotY设置为'%p'的时候的原点为屏幕的左上角,向右为x正方向,向下为y正方向

Example:

复制代码
ImageView img =  (ImageView) findViewById(R.id.img);Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale_anim);img.startAnimation(scaleAnimation);复制代码

也可以直接用代码设置:

ScaleAnimation scaleAnim2 = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);复制代码

1.3 translate 画面转换位置移动动画效果

  • android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
  • android:toXDelta 结束点X轴坐标
  • android:toYDelta 结束点Y轴坐标

1.4 rotate 画面转移旋转动画效果

  • android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

1.5 Animation Set

AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0.1f);ScaleAnimation scaleAnim2 = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);RotateAnimation rotateAnim = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF,     0.5f, Animation.RELATIVE_TO_SELF, 0.5f);xy.addAnimation(alphaAnim);xy.addAnimation(rotateAnim);xy.addAnimation(scaleAnim2);xy.setDuration(3000);btn_xml.startAnimation(xy);复制代码

2. Property Animation

Property Animation 也可以用xml来定义,property的xml放在 res/animator 下。

2.1 xml设置

  • alpha
复制代码
  • sets
复制代码
  • Java代码中调用

载入 ObjectAnimator 动画 (1)通过AnimatorInflater.loadAnimator载入, (2)注意需要设置 setTarget (3)和代码一样的道理,属性值也可以在代码中动态修改 (4)新建的动画类的类别必须跟XML文件中的根标签对应

ObjectAnimator xxx = (ObjectAnimator) AnimatorInflater.loadAnimator(MainActivity.this,        R.animator.test_object_animator);xxx.setTarget(v);xxx.start();复制代码

2.2 java设置

  • 设置单一的 ObjectAnimator
ObjectAnimator anim = ObjectAnimator                //新建ObjectAnimator        .ofFloat(v, "alpha", 1.0f, 0.0f,1.0f)        //设置变化的值从3.0f到0.0f        .setDuration(1000);                          //设置变化时间anim.setRepeatCount(1);                             //设置重复次数anim.setRepeatMode(ObjectAnimator.REVERSE);         //设置重复模式anim.setTarget(v);                                  //绑定控件,可以不用设置btn_java.setPivotX(0);                              //设置变化的中心btn_java.setPivotX(0);anim.start();                                       //开启动画复制代码
  • 设置单一的动画,ValueAnimator,必须要在addUpdateListener中更新控件的属性,不然没有任何效果
ValueAnimator animator = ValueAnimator        .ofFloat(3.0f,0.0f)        .setDuration(1000);animator.setRepeatCount(1);animator.setRepeatMode(ValueAnimator.RESTART);animator.setTarget(v);animator.start();animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {    @Override    public void onAnimationUpdate(ValueAnimator animation) {        float x = (Float) animation.getAnimatedValue();        v.setAlpha(x);                           //设置透明度        v.setScaleX(x);                          //设置X轴        v.setScaleY(x);                          //设置Y轴    }});复制代码
  • 设置动画集,AnimatorSet
AnimatorSet set = new AnimatorSet();set.setDuration(1000);set.play(anim);set.play(animator);set.playTogether(anim, animator);    //设置两个动画一起运行set.start();复制代码

转载于:https://juejin.im/post/5c94a5ce5188252d8f631045

你可能感兴趣的文章
[INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突。
查看>>
Asp.net WebPages框架运行原理浅析(转)
查看>>
2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
查看>>
枚举类型
查看>>
even though和even if的区别
查看>>
聊天项目
查看>>
Node.js 的第一个 demo 和本地服务器配置
查看>>
局部临时表 全局临时表 表变量
查看>>
23种设计模式彩图
查看>>
Matlab中的函数句柄@
查看>>
C和C++ const的声明差异
查看>>
Android RecyclerViewSwipeDismiss:水平、垂直方向的拖曳删除item
查看>>
Excel、Exchange 和 C# (摘要)
查看>>
微软vs2015先行,Visual Studio 2015正式版离线iso及在线下载(附key)附带百度云盘地址...
查看>>
python np.linspace
查看>>
《Python Enhancement Proposal #8》要点 学习摘录
查看>>
HTML中的div标签
查看>>
Unity3d札记 --TanksTutorial收获与总结
查看>>
oracle-审计3
查看>>
有关索引的DMV
查看>>