浅析Android动画(一)——Tween Anim

  • 变换动画有四种 :alpha(透明度)、translate(平移)、rotate(旋转)、scale(伸缩),动画可以在xml实现,需要在res文件夹下新建一个anim文件夹,把xml文件放在这里;当然也可以在代码中实现。
  • 所有变换动画共有的属性
    duration:动画持续时间(单位:毫秒)
    fillAfter:布尔类型,表示动画结束后是否维持动画结束时的状态
    fillBefore:布尔类型,表示动画结束后是否维持动画开始时的状态
    interpolator:动画插值器(加速、减速等)
    repeatCount:重复次数
    repeatMode:重复模式,restart/reverse(顺序/倒序)
    startOffset:动画延迟运行时间(单位:毫秒)
基础动画
alpha

xml形式

alpha.png
  • fromAlpha:表示起始透明度,0~1,0为完全透明,1为完全不透明
  • toAlpha:表示终止透明度,0~1,0为完全透明,1为完全不透明

xml文件的使用方法都是以下这样:
使用方法:

//通过AnimationUtils的loadAnimation调取xml动画文件
Animation animation= AnimationUtils.loadAnimation(this,R.anim.alpha);
//启动动画
mImageView.startAnimation(animation);

代码形式

AlphaAnimation aa=new AlphaAnimation (0.1f,1f);//第一个参数为起始透明度,第二个参数为终止透明度
aa.setDuration(1000);//设置动画时间
imageView.startAnimation(aa);//启动动画```

######tanslate

xml形式

![translate.png](http://upload-images.jianshu.io/upload_images/1814117-90bdfcba25d9e87b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- fromXDelta:表示相对于自己左上角X方向上的起始位置,具体到数值,也可以用%p表示宽的百分比,如100%p表示相当于自己左上角X方向上100%宽度的距离
- toXDelta:表示相对于自己左上角X方向上的终点
- fromYDelta:表示相对于自己左上角Y方向上的起点
- toYDelta:表示相对于自己左上角Y方向上的终点

代码形式:

TranslateAnimation ta=new TranslateAnimation (0f,100f,0f,100f);//第一个参数为X起始点,第二个参数为X终点,第三个参数为Y起始点,第四个参数为Y终点
ta.setDuration(1000);//设置动画时间
imageView.startAnimation(ta);//启动动画```

rotate

xml形式

rotate.png
  • fromDegrees:表示起始角度
  • toDegrees:表示终止角度
  • pivotY:旋转中心相对于自身左上角Y轴上的百分比距离坐标
  • pivotX:旋转中心相对于自身左上角X轴上的百分比距离坐标

toDegrees大于fromDegrees为顺时针,相反为逆时针

代码形式:

//前两个参数为起始角度和终止角度;第三个和第五个参数表示旋转中心相对于自身来说,类似的还有Animation.RELATIVE_TO_PARENT相对于父布局,第四和第六个参数表示,旋转中心相对于自身左上角的X和Y方向上的百分比距离,即pivotX和pivotY属性`
`RotateAnimation ra=new RotateAnimation(0f,360f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
ra.setDuration(1000);//设置动画时间
imageView.startAnimation(ra);//启动动画```

######scale
xml形式

![scale.png](http://upload-images.jianshu.io/upload_images/1814117-8ce3cb990de4658f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- fromXScale:起始时X方向上相对于原始尺寸的大小
- fromYScale:起始时Y方向上相对于原始尺寸的大小
- toXScale:结束时X方向上相对于原始尺寸的大小
- toYScale:结束时Y方向上相对于原始尺寸的大小
- pivotY:收缩中心相对于自身左上角Y轴上的百分比距离坐标
- pivotX:收缩中心相对于自身左上角X轴上的百分比距离坐标
新增几个属性看下
- repeatCount :重复次数,重复1次
- repeatCount :重复模式,reverse在这里表示 这个动画先放大一次,在反过来缩小一次结束
- interpolator :插值器

AccelerateDecelerateInterpolator============动画开始与结束的地方速率改变比较慢,在中间的时候加速。
AccelerateInterpolator===================动画开始的地方速率改变比较慢,然后开始加速。
AnticipateInterpolator ==================开始的时候向后然后向前甩。
AnticipateOvershootInterpolator=============开始的时候向后然后向前甩一定值后返回最后的值。
BounceInterpolator=====================动画结束的时候弹起。
CycleInterpolator======================动画循环播放特定的次数,速率改变沿着正弦曲线。
DecelerateInterpolator===================在动画开始的地方快然后慢。
LinearInterpolator======================以常量速率改变。
OvershootInterpolator====================向前超出一定值后再回到原来位置。


代码形式

ScaleAnimation sa=new ScaleAnimation(0f,1f,0f,1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
sa.setDuration(1000);//设置动画时间
sa.setInterpolator(new AccelerateInterpolator());//设置插值器,这里表示加速动画
imageView.startAnimation(sa);//启动动画


#####组合动画
xml形式


![set1.png](http://upload-images.jianshu.io/upload_images/1814117-e0ff5c60fcb729b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
> 在xml中的<set>标签是AnimationSet的意思,它代表动画集合的意思,也就是在这个标签下可以有多个动画一起生效

代码形式

//先声明动画集合
AnimationSet set=new AnimationSet(true);//参数为布尔型,参数名称shareInterpolator,表示是否共享一个插值器,这里选择ture
//将上面的动画添加进去
set.addAnimation(aa);
set.addAnimation(ta);
set.addAnimation(ra);
set.addAnimation(sa);
imageView.startAnimation(set);


######startOffset属性的使用
在组合动画中,如果想要达到这样一种效果,先旋转,旋转结束再进行移动,需要用到这个属性
xml形式

![set2.png](http://upload-images.jianshu.io/upload_images/1814117-21f915612200091c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

startOffset属性只能在<set>标签里面声明,因此需要在一个<set>内部嵌套一个<set>
在这个布局文件中,内部的set动画就会在动画开始1秒之后才开始运作

代码形式

//先声明动画集合
AnimationSet set=new AnimationSet(true);//参数为布尔型,参数名称shareInterpolator,表示是否共享一个插值器,这里选择ture
//将上面的动画添加进去
aa.setDuration(1000);
set.addAnimation(aa);
//ta延迟1秒运行
ta.setDuration(1000);
ta.setStartOffset(1000);
set.addAnimation(ta);
//ra延迟2秒运行
ra.setDuration(1000);
ra.setStartOffset(2000);
set.addAnimation(ra);
imageView.startAnimation(set);```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容