Android动画总结

动画应该是很基础的东西了,但是由于自己的记性不太好,总是记不住那些参数和方法,只是知道怎么用而已。所以每次用的时候都去百度或者Google。属性动画的属性确实有点多,这次终于鼓足了勇气作一个总结,让动画的种种用法彻底地记在脑子里面。

动画分类:

动画分为帧动画(Frame Animation)、补间动画(Tweened Animation)和属性动画。

帧动画

帧动画就像放电影一样,连续播放一张张的图片形成动画。

  1. 在drawable文件夹下创建一个animlist.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@mipmap/mike_volume_part1" android:duration="150"></item>
    <item android:drawable="@mipmap/mike_volume_part2" android:duration="150"></item>
    <item android:drawable="@mipmap/mike_volume_part3" android:duration="150"></item>
    <item android:drawable="@mipmap/mike_volume_part4" android:duration="150"></item>
</animation-list>

动画的每一帧150毫秒,一共4帧。oneshot表示是否重复播放。

  1. 播放帧动画
        ivFrame.setImageResource(R.drawable.animlist);
        AnimationDrawable drawable = (AnimationDrawable) ivFrame.getDrawable();
        drawable.start();  //开始
        //drawable.stop();  //结束

演示效果:


giphy (1).gif

补间动画

XML配置中属性名:

alpha 透明度动画
scale 缩放动画
translate 移动动画
rotate 旋转动画

代码中动画类名:

AlphaAnimation 透明度动画
ScaleAnimation 缩放动画
TranslateAnimation 移动动画
RotateAnimation 旋转动画

Alpha属性值说明

fromAlpha 起始时透明度,范围0-1
toAlpha 结束时透明度,范围0-1

Scale属性值说明

fromXScale 起始时X轴上的缩放比例
toXScale 结束时X轴上的缩放比例
fromYScale 起始时Y轴上的缩放比例
toYScale 结束时Y轴上的缩放比例
pivotX 缩放中心点X坐标位置
pivotY 缩放中心点Y坐标位置

Translate属性值说明

fromXDelta 起始时动画在X坐标的位置
toXDelta 结束时动画在X坐标的位置
fromYDelta 起始时动画在Y坐标的位置
toYDelta 结束时动画在Y坐标的位置

Rotate属性值说明

fromDegrees 起始时控件角度
toDegrees 结束时控件角度
pivotX 旋转中心点X坐标位置

pivotY 旋转中心点Y坐标位置

公共属性:

fillAfter 为ture时,该动画结束后保持结束时的状态
interpolator 设置动画插值器
duration 设置动画持续时间
startOffset 动画在几秒开始执行

将以上各个动画类型办个组合来举个栗子:

在anim文件夹下创建了animset.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0" android:toAlpha="1" android:duration="2000"/>

    <rotate android:fromDegrees="0" android:toDegrees="720" android:pivotX="50%" android:pivotY="50%" android:duration="2000"/>

    <scale android:fromXScale="1" android:toXScale="2" android:fromYScale="1" android:toYScale="2"
        android:pivotY="50%" android:pivotX="50%" android:duration="2000"/>

    <translate android:fromXDelta="0" android:toXDelta="300" android:fromYDelta="0" android:toYDelta="300" android:duration="2000"/>
</set>

加载该动画方式:

        Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.animset);
        animation.setFillAfter(true);
        ivTween.startAnimation(animation);

演示效果:


giphy (2).gif

属性动画:ObjectAnimator用法

调用方法:
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)

  • 第一个参数用于指定这个动画要操作的是哪个控件
  • 第二个参数用于指定这个动画要操作这个控件的哪个属性
  • 第三个参数是可变长参数,这个就跟 ValueAnimator 中的可变长参数的意义一样了,用于设置属性的变化过程。

任性一下,这么多字符串,我怎么知道有哪些属性啊?!如果写错了呢?

1、透明度:alpha  
public void setAlpha(float alpha)  

2、旋转度数:rotation、rotationX、rotationY  
public void setRotation(float rotation)  
public void setRotationX(float rotationX)  
public void setRotationY(float rotationY)  

3、平移:translationX、translationY  
public void setTranslationX(float translationX)   
public void setTranslationY(float translationY)  

4、缩放:scaleX、scaleY  
public void setScaleX(float scaleX)  
public void setScaleY(float scaleY)

多个属性动画调用:

    private void valueAnim(){
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(ivTween,"alpha",0,1);
        objectAnimator.setDuration(2000);
        objectAnimator.start();

        ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(ivTween,"scaleX",1,2);
        objectAnimator1.setDuration(2000);
        objectAnimator1.start();

        ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(ivTween,"scaleY",1,2);
        objectAnimator2.setDuration(2000);
        objectAnimator2.start();

        ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(ivTween,"rotation",0,360);
        objectAnimator3.setDuration(2000);
        objectAnimator3.start();
    }

演示效果:


giphy (3).gif
动画监听器:

AnimatorListener,用于监听动画执行的过程。AnimatorUpdateListener,用于监听动画执行过程中的值变化。

        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                //动画开始时调用
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                //动画结束时调用
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                //动画取消时调用
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                //动画重复执行时调用
            }
        });

        //动画执行过程中不断执行,可以获取得到当前动画执行的值
        objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

            }
        });

github代码地址,demo简单,需要的可参考一下。

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

推荐阅读更多精彩内容

  • 在App中合理地使用动画能够获得友好愉悦的用户体验,Android中的动画有View动画、属性动画、帧动画、布局动...
    xiaoyanger阅读 3,903评论 4 19
  • 在日常的Android开发中,经常会使用到动画,这里就对Android开发中的动画做一下总结 Android 动画...
    李建彪阅读 459评论 0 1
  • 在日常的Android开发中,经常会使用到动画,这里就对Android开发中的动画做一下总结。 Android 动...
    IAM四十二阅读 132,819评论 23 349
  • 本文总结常用属性方法等,详细学习可使用如下郭霖大神文章: Android属性动画完全解析(上),初识属性动画的基本...
    SiberianDante阅读 298评论 0 2
  • 覆辙韶光数几度春秋 纵观群书慕圣贤风流 篆墨行文若仙灵佐佑 巧笔漫有惊雷脍炙人口 未觉流年分寒暑夜昼 红尘沧桑若白...
    觉智师兄阅读 1,861评论 0 0