资讯专栏INFORMATION COLUMN

Android 动画

jlanglang / 426人阅读

摘要:或者,也是必须值,表明了动画结束的点,颜色由位十六进制的数字表示。动画的时长,类型,以毫秒为单位,默认为毫秒。有和两种分别说明动画值为和型。可以为任何一个对象添加动画,同事对象自身属性也会修改。

动画有哪些?

动画如何实现?

动画需要注意的地方?

动画框架

View Animation

Frame

Tween

Property Animation

Frame动画

顺序播放一组预先定义好的图片,有动画播放效果。
文件目录:res/drawable/filename.xml
编译资源数据类型:AnimationDrawable
资源引用:

Java: R.drawable.filename

XML: @[package:]drawable.filename

    
    
    
    
XML定义动画

定义一个animation-list,设置一组动画图片及持续时间

创建AnimationDrwable,读取动画

为View设置该动画

    
    
    
    
    
    
    
    
    
    
    

FrameActivity.java

     /**
     *  从XML中读取animation-list
     */
    private void setFrameDrawableAnimation() {
        frameDrawableAnim = (AnimationDrawable) getResources()
                .getDrawable(R.drawable.dynamic_road_running);
        mFrameIv.setImageDrawable(frameDrawableAnim);
        frameDrawableAnim.start();
    }
Java代码实现动画
    /**
     * 代码控制,依次添加帧动画的每一帧图片
     */
    private void setFrameCodeAnimation() {
        frameCodeAnim = new AnimationDrawable();
        frameCodeAnim.setOneShot(false);  //true:动画只显示一次,这里设置为false,持续显示动画
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_1),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_2),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_3),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_4),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_5),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_6),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_7),200);
        frameCodeAnim.addFrame(getResources().getDrawable(R.drawable.progress_8),60);
        mFrameCodeIv.setImageDrawable(frameCodeAnim);
        frameCodeAnim.start();
    }
实现效果

Tween动画

文件位置: res/anim/filename.xml
编译资源的数据类型:Animation。
资源引用:

Java: R.anim.filename

XML: @[package:]anim/filename

    
    
        
        
        
        
        
        ...
        
    
动画种类 TranslateAnimation

:平移动画

android:fromXDelta

android:toXDelta

android:fromYDelta

android:toYDelta

属性值代表起始/结束方向的位置,可有俩种表示:

Float:是一个绝对值,表示相对于自身原始位置的像素值

百分值:浮点数num%、num%p

以num%表示,代表相对于自己的百分比,比如toXDelta定义为100%就表示在X方向上移动自己的1倍距离

以num%p表示,代表相对于父类组件的百分比

ScaleAnimation

:缩放动画,动态调控件尺寸的效果

android:fromXScale

android:toXScale

android:fromYScale

android:toYScale

Float值表示,为动画起始到结束时,X、Y坐标上的伸缩尺寸

0.0表示收缩到没有

1.0表示正常无伸缩

通过设置pivotX和pivotY可以指定image缩放的中心点。如果我们想表示中轴点为图像的中心,我们可以把两个属性值定义成0.5或者50%

android:pivotX

android:pivotY

RotateAnimation

:旋转动画

android:fromDegrees

android:toDegrees

代表起始和结束的角度,浮点值,单位:度。

android:pivotX

android:pivotY

Float值或者百分比表示:浮点数、num%、num%p。

数字方式代表相对于自身左边缘的像素值,

num%方式代表相对于自身左边缘或顶边缘的百分比

num%p方式代表相对于父容器的左边缘或顶边缘的百分比。

AlphaAnimation

:透明度动画

android:fromAlpha

android:toAlpha

Float值表示,代表动画开始和结束时透明度,0.0表示完全透明,1.0表示完全不透明。

代码实现

在drawable/anim目录下,创建xml文件

定义set集合,及四种动画效果

在代码中读取该动画,再为某个view设置

    
    android:zAdjustment="normal">

    

    

    

    

    

代码中为某个view设置该动画,并开始播放

tweenAnimation = new AnimationUtils().loadAnimation(this, R.anim.tween_animation);
tweenIv.startAnimation(tweenAnimation);
实现效果

Property动画

可实现效果:在一个时间间隔内完成对象从一个属性值到另一个属性值的改变。
目录:res/animator/filename.xm
编译后的资源为:ValueAnimator, ObjectAnimator, or AnimatorSet。 
XML文件的根元素必须为set,可以嵌套。

    

    

    

    
        ...
    
    
属性说明

ordering:设置子动画启动方式是先后有序的还是同时

android:propertyName:String类型,必须要设定的值,代表要执行动画的属性,通过名字引用,比如你可以指定了一个View的”alpha” 或者 “backgroundColor” ,这个objectAnimator元素没有暴露target属性,因此比不能够在XML中执行一个动画,必须通过调用loadAnimator() 填充你的XML动画资源,并且调用setTarget() 应用到拥有这个属性的目标对象上。

android:valueFrom:相对应valueTo,动画的起始点,如果没有指定,系统会通过属性身上的get 方法获取 ,颜色也是6位十六进制的数字表示。

android:valueTo:Float、int或者color,也是必须值,表明了动画结束的点,颜色由6位十六进制的数字表示。

android:duration:动画的时长,int类型,以毫秒为单位,默认为300毫秒。

android:startOffset:动画延迟的时间,从调用start方法后开始计算,int型,毫秒为单位

android:repeatCount:一个动画的重复次数,int型,”-1“表示无限循环,”1“表示动画在第一次执行完成后重复执行一次,也就是两次,默认为0,不重复执行。

android:repeatMode:重复模式:int型,当一个动画执行完的时候应该如何处理。该值必须是正数或者是-1,“reverse”会使得按照动画向相反的方向执行,可实现类似钟摆效果。“repeat”会使得动画每次都从头开始循环。

android:valueType:关键参数,如果该value是一个颜色,那么就不需要指定,因为动画框架会自动的处理颜色值。有intType和floatType两种:分别说明动画值为int和float型。

实例说明

场景:俩张图片切换,中间加上淡入、淡出的动画效果。
分析:多种动画,可以用AnimatorSet。

代码实现

 private void setObjectAnimation() {
    setObjectAnimation();
    final ImageView newBgView = mCurView == mAnimationView01Iv ? mAnimationView02Iv : mAnimationView01Iv;
    changeDrawable();      //俩张图片轮询更替
    newBgView.setImageDrawable(drawable);

    ObjectAnimator fadeAnim = ObjectAnimator.ofFloat(mCurView, "alpha", 1.0f, 0.0f);     //前一张图片淡出
    ObjectAnimator appearAnim = ObjectAnimator.ofFloat(newBgView, "alpha", 0.0f, 1.0f);   //后一张图片淡入
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.setDuration(2000);
    animatorSet.setInterpolator(new LinearInterpolator());
    animatorSet.playTogether(fadeAnim, appearAnim);
    animatorSet.start();
    animatorSet.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            mCurView = newBgView;
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
}

private void changeDrawable() {
    if (bDrawable_1) {
        drawable = getResources().getDrawable(R.drawable.cat2);
        bDrawable_1 = false;
    } else {
        drawable = getResources().getDrawable(R.drawable.cat);
        bDrawable_1 = true;
    }
}
效果展示

View Animation 与 Property Animation 的比较 View Animation

只能为View添加动画

支持动画比较少,如不支持背景颜色变化的动画

动画变化时,改变的是View的绘制效果,真正的View属性保持不变,如无论如何缩放或平移View,它的有效点击区域并没有扩展到其他动画效果区域,它的位置和大小总是不变的。

Property Animation:

可以为任何一个对象添加动画,同事对象自身属性也会修改。

属性动画处理动画更强大,可指定动画的多个属性, 并可多个动画一起展示。

使用动画的注意事项 OOM

当图片比较大时,容易出现OOM,因此多注意帧动画所呈现的一组动画的内存。

内存泄漏

属性动画中若设置的动画是无限循环的动画,则这类动画再Activity退出时要及时停止。

兼容性问题

属性动画是在 API 11 才加入的,所有在系统比较低的版本中可以使用兼容性的动画Nineoldandroids。

本文发表于个人博客:http://lavnfan.github.io/,欢迎指教。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12952.html

相关文章

  • 动画 - 收藏集 - 掘金

    摘要:本文分析主要把文件转为动画属性动画入门实践掘金前言说道动画肯定要先介绍一下,逐帧动画和补间动画。安卓动画详解一官方文档掘金概览安卓为元素和自己绘制图形提供了一系列的,这篇文章介绍了这些的主要用法。 那些年收藏的 Android 开源库集合 (UI 效果) - Android - 掘金文章内容定期更新该专题其他文章:那些年收藏的Android开源库集合(控件)那些年收藏的Android开...

    roadtogeek 评论0 收藏0
  • 开机动画

    摘要:高级动画开发系列矢量图动画自从更新以来,世界变的异常丰富多彩,本篇主要讲解以后实现酷炫动画的新技术。有矢量图动画,静态,动态,轨迹动画,路径变换动画,并指出了目前常见的一些兼容性问题。 快手 Android 客户端纯代码实现的快门打开下拉刷新动画 这个开源项目,主要涉及到直线和圆之间的公式,重点就是旋转和缩放快门的 6 条线 Android 动画实现详解 我们都知道,漂亮的用户界面是衡...

    iKcamp 评论0 收藏0
  • 开机动画 - 收藏集 - 掘金

    摘要:文基础夯实重温动画二之掘金心灵鸡汤天下事有难易乎,为之,则难者亦易矣不为,则易者亦难矣。 Android全套动画使用技巧 - 掘金我的开源社区博客同步发布更新:Android全套动画使用技巧一、Android View 动画框架 Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,控制的整个View,实现原理是每次绘制视图时View所在ViewGroup中的dra......

    siberiawolf 评论0 收藏0
  • Android 动画(续)

    摘要:另外,在使用方面,它与官方的属性动画基本一致。属性动画的核心类有个类,以及文件中的标签对应标签的属性有个候选值,分别表示标签内的动画是按照前后顺序播放和同时播放。 该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另...

    jifei 评论0 收藏0
  • Android 动画

    摘要:系统预置的有线性插值器匀速动画加速减速插值器动画两头慢中间快和减速插值器动画越来越慢抖动动画等。系统预置的有针对整型属性和针对浮点型属性针对属性动画的实际实现者前面也说过动画的过程实际上是矩阵变换的过程,就是操作矩阵变换的类。 该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探...

    afishhhhh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<