1 概述

1.1 编写目的

学习Android矢量动画VectorDrawable相关的知识点,记录下来,方便后续学习及查询。

2 VectorDrawable

2.1 图片XML(Vector)

Vector在《Android矢量图形-Vector》中已经详细说明,直接创建vector_pingpong.Xml,内容如下:

                                                
效果图如下:
 
2.2 动作XML(Set->ObjectAnimator)

创建move_pingpong.Xml,内容如下:

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

创建move_racket.Xml,内容如下:

<?xml version="1.0"encoding="utf-8"?>        
2.2.1 Set 
一个set中可以有多个objectAnimator,通过ordering属性控制执行顺序。
Ordering:取值["sequentially"|"together"], sequentially(默认),顺序执行objectAnimator;together,同时执行objectAnimator。
2.2.2 ObjectAnimator 
ObjectAnimator中有propertyName、valueType、valueFrom、valueTo、repeatCount、repeatMode、duration、interpolator、startOffset等属性。
2.2.2.1 PropertyName属性(属性名)
PropertyName:指定动作属性["translateX"|"translateY"| "trimPathStart"|"trimPathEnd"|"scaleX"|"scaleY"|"rotation"|"fillAlpha"] 等,Vector里面的属性基本上都可以(需要注意target里面绑定的是group就只能使用当前group的属性,下级group或path等不能使用,绑定的path就只能使用当前path的属性,clip-path一样)。
2.2.2.2 ValueType属性(属性值类型)
ValueType:PropertyName指定属性值的类型,共有四种类型,分别是:["intType"|"floatType"|"colorType"|pathType]。
2.2.2.3 ValueFrom、ValueTo属性(动画初始和结束值)
ValueFrom:PropertyName指定属性的初始值,值的类型为ValueType(如位置、颜色、透明、PathData等)。
ValueTo:PropertyName指定属性的结束值,值的类型为ValueType。
2.2.2.4 RepeatCount、RepeatMode属性(动画重复次数和样式)
RepeatCount:定义动画重复次数,["infinite"]为无限次。
RepeatMode:定义重复的行为 ["restart"|"reverse"], restart:直接跳到起始位置重新开始;reverse:倒退到起始位置重新开始。
2.2.2.5 Duration属性(动画时间)
Duration:动画执行一次的时间,单位ms。
2.2.2.6 Interpolator属性(动画过程控制)
Interpolator:控制动画的运行过程。Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。可以自己定义,也可以使用默认的,列如:
Accelerate:加速,共有下面四种模式

["@android:interpolator/accelerate_decelerate"|"@android:interpolator/accelerate_cubic"|

"@android:interpolator/accelerate_quad"|"@android:interpolator/accelerate_ quint "]

accelerate_decelerate:在动画开始与结束的地方速率改变比较慢,在中间的时候加速;
accelerate_cubic:拟合立方缓和函数的曲线加速。
accelerate_quad:曲线匹配的quadtratic缓解功能加速。
accelerate_ quint:曲线匹配功能昆特缓解加速。
Decelerate:减速,共有四种模式,同Accelerate。

["@android:interpolator/accelerate_decelerate"|"@android:interpolator/decelerate_cubic"|

"@android:interpolator/decelerate_quad"|"@android:interpolator/decelerate_ quint "]。

Anticipate:开始的时候向后然后向前甩["@android:interpolator/accelerate_decelerate"] 。             
AnticipateOvershoot:开始的时候向后然后向前甩一定值后返回最后的值["@android:interpolator/anticipate_overshoot"] 。
Bounce:动画结束的时候弹起["@android:interpolator/bounce"] 。         
Cycle:动画循环播放特定的次数,速率改变沿着正弦曲线["@android:interpolator/cycle"] 。
Linear:以常量速率改变["@android:interpolator/linear"] 。                         
Overshoot:向前甩一定值后再回到原来位置["@android:interpolator/overshoot"]。
2.2.2.7 StartOffset属性(延时)
延迟播放的时间,单位ms,只延时第一次播放,重复播放时不延时。
2.3 关联动画XML(animated-vector) 

创建animator_pingpong.xml,内容如下:

<?xml version="1.0"encoding="utf-8"?>                
2.3.1 Animated-vector(指定图片)
只有一个属性drawable,指向执行动画的vector图片。
2.3.2 Target(关联)
有animation和name两个属性,animation指向动作xml;name指向的名字和Animated-vector指定图片中的group或path或clip-path的名字一致。可以同时有多个target分别指向不同的动作和名字。
2.4 布局引用XML

创建vector_pingpong.xml,如下图所示:

<?xml version="1.0"encoding="utf-8"?>    
布局中使用src指定动画。静态效果如下:
 
2.5 运行
2.5.1 代码片段

运行主要代码如下所示:

public classVectorActivityextendsActivity{    private ImageViewmImageView;    @Override    protected void onCreate(@NullableBundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.vector_pingpong);        initView();    }    private void initView() {        mImageView =(ImageView) findViewById(R.id.vector_imageview);        Drawable drawable = mImageView.getDrawable();        if (drawable instanceofAnimatable)            ((Animatable)drawable).start();    }}
2.5.2 运行结果

 

2.5.3 大小改变的动画(多个ObjectAnimator)

其它的不变,将move_pingpong.Xml修改为:

<?xml version="1.0"encoding="utf-8"?>                        
效果如下:
 
2.5.4 颜色改变的动画(colorType)

move_pingpong.Xml恢复到初始状态,新增move_pingpong_path.Xml文件如下:

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

添加target,修改animator_pingpong.xml如下:

<?xml version="1.0"encoding="utf-8"?>                        
效果如下:

 

2.5.5 pathData改变的动画(pathType、restart)

修改后的vector_pingpong.xml如下:

                                                                                                                               
效果图如下:
 

修改animator_pingpong.xml如下:

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

修改move_pingpong.Xml如下:

<?xml version="1.0"encoding="utf-8"?>        
修改move_pingpong_path.xml如下:

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

其它文件不变,效果如下:


更多相关文章

  1. recycleView的item获取焦点
  2. 2011.07.18(4)——— android 播放gif
  3. APP开发实战85-帧动画
  4. Android横竖屏限制切换
  5. 实现android启动界面字体的动画效果
  6. Android中EditText属性
  7. TextView中ellipsize属性
  8. View类xml属性、方法
  9. android之AnimationDrawable

随机推荐

  1. Android菜单应用(Menu)
  2. Android(安卓)如何使一个service 开机启
  3. android延迟进入主界面和点击按钮进入主
  4. Android应用程序使用Localsocket与Linux
  5. Android国际化
  6. 动态设置android:drawableLeft|Right|Top
  7. Activity切换导致的onCreate重复执行
  8. 基于Android客户端的人人网开放平台开发
  9. Android图片下载缓存库picasso解析
  10. ListView.setOnItemClickListener、setOn