展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 系统应用 > 8.4.2 Android动画合集之补间动画

8.4.2 Android动画合集之补间动画

Android Studio macOS版
Android Studio macOS版

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

Mac 2026-10-13
数据库 编程开发 服务器管理 集成开发环境
立即下载

本节引言: 本节带来的是Android三种动画中的第二种——补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定动画开始,以及动画结束"关键帧", 而动画变化的"中间帧"则由系统计算并补齐!好了,开始本节学习~ 1.补间动画的分类和Inte

本文目录

    本节引言:

    本节带来的是Android三种动画中的第二种——补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定动画开始,以及动画结束"关键帧", 而动画变化的"中间帧"则由系统计算并补齐!好了,开始本节学习~

    1.补间动画的分类和Interpolator

    Andoird所支持的补间动画效果有如下这五种,或者说四种吧,第五种是前面几种的组合而已~

    • AlphaAnimation:透明度渐变效果,创建时许指定开始以及结束透明度,还有动画的持续 时间,透明度的变化范围(0,1),0是完全透明,1是完全不透明;对应<alpha/>标签!
    • ScaleAnimation:缩放渐变效果,创建时需指定开始以及结束的缩放比,以及缩放参考点, 还有动画的持续时间;对应<scale/>标签!
    • TranslateAnimation:位移渐变效果,创建时指定起始以及结束位置,并指定动画的持续 时间即可;对应<translate/>标签!
    • RotateAnimation:旋转渐变效果,创建时指定动画起始以及结束的旋转角度,以及动画 持续时间和旋转的轴心;对应<rotate/>标签
    • AnimationSet:组合渐变,就是前面多种渐变的组合,对应<set/>标签

    在开始讲解各种动画的用法之前,我们先要来讲解一个东西:Interpolator

    用来控制动画的变化速度,可以理解成动画渲染器,当然我们也可以自己实现Interpolator 接口,自行来控制动画的变化速度,而Android中已经为我们提供了五个可供选择的实现类:

    • LinearInterpolator:动画以均匀的速度改变
    • AccelerateInterpolator:在动画开始的地方改变速度较慢,然后开始加速
    • AccelerateDecelerateInterpolator:在动画开始、结束的地方改变速度较慢,中间时加速
    • CycleInterpolator:动画循环播放特定次数,变化速度按正弦曲线改变: Math.sin(2 * mCycles * Math.PI * input)
    • DecelerateInterpolator:在动画开始的地方改变速度较快,然后开始减速
    • AnticipateInterpolator:反向,先向相反方向改变一段再加速播放
    • AnticipateOvershootInterpolator:开始的时候向后然后向前甩一定值后返回最后的值
    • BounceInterpolator: 跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100
    • OvershottInterpolator:回弹,最后超出目的值然后缓慢改变到目的值

    而这个东东,我们一般是在写动画xml文件时会用到,属性是:android:interpolator, 而上面对应的值是:@android:anim/linear_interpolator,其实就是驼峰命名法变下划线而已 AccelerateDecelerateInterpolator对应:@android:anim/accelerate_decelerate_interpolator!

    2.各种动画的详细讲解

    这里的android:duration都是动画的持续时间,单位是毫秒~

    1)AlphaAnimation(透明度渐变)

    anim_alpha.xml:

    属性解释:

    fromAlpha :起始透明度
    toAlpha:结束透明度
    透明度的范围为:0-1,完全透明-完全不透明

    2)ScaleAnimation(缩放渐变)

    anim_scale.xml:

    属性解释:

    • fromXScale/fromYScale:沿着X轴/Y轴缩放的起始比例
    • toXScale/toYScale:沿着X轴/Y轴缩放的结束比例
    • pivotX/pivotY:缩放的中轴点X/Y坐标,即距离自身左边缘的位置,比如50%就是以图像的 中心为中轴点

    3)TranslateAnimation(位移渐变)

    anim_translate.xml:

    属性解释:

    • fromXDelta/fromYDelta:动画起始位置的X/Y坐标
    • toXDelta/toYDelta:动画结束位置的X/Y坐标

    4)RotateAnimation(旋转渐变)

    anim_rotate.xml:

     

    属性解释:

    • fromDegrees/toDegrees:旋转的起始/结束角度
    • repeatCount:旋转的次数,默认值为0,代表一次,假如是其他值,比如3,则旋转4次 另外,值为-1或者infinite时,表示动画永不停止
    • repeatMode:设置重复模式,默认restart,但只有当repeatCount大于0或者infinite或-1时 才有效。还可以设置成reverse,表示偶数次显示动画时会做方向相反的运动!

    5)AnimationSet(组合渐变)

    非常简单,就是前面几个动画组合到一起而已~

    anim_set.xml:

      
      
      
      
      
      

    3.写个例子来体验下

    好的,下面我们就用上面写的动画来写一个例子,让我们体会体会何为补间动画: 首先来个简单的布局:activity_main.xml:

    
    

    好哒,接着到我们的MainActivity.ja va,同样非常简单,只需调用AnimationUtils.loadAnimation() 加载动画,然后我们的View控件调用startAnimation开启动画即可~

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button btn_alpha;
        private Button btn_scale;
        private Button btn_tran;
        private Button btn_rotate;
        private Button btn_set;
        private ImageView img_show;
        private Animation animation = null;
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            bindViews();
        }
    private void bindViews() {
            btn_alpha = (Button) findViewById(R.id.btn_alpha);
            btn_scale = (Button) findViewById(R.id.btn_scale);
            btn_tran = (Button) findViewById(R.id.btn_tran);
            btn_rotate = (Button) findViewById(R.id.btn_rotate);
            btn_set = (Button) findViewById(R.id.btn_set);
            img_show = (ImageView) findViewById(R.id.img_show);
    btn_alpha.setOnClickListener(this);
            btn_scale.setOnClickListener(this);
            btn_tran.setOnClickListener(this);
            btn_rotate.setOnClickListener(this);
            btn_set.setOnClickListener(this);
    }
    @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_alpha:
                    animation = AnimationUtils.loadAnimation(this,
                            R.anim.anim_alpha);
                    img_show.startAnimation(animation);
                    break;
                case R.id.btn_scale:
                    animation = AnimationUtils.loadAnimation(this,
                            R.anim.anim_scale);
                    img_show.startAnimation(animation);
                    break;
                case R.id.btn_tran:
                    animation = AnimationUtils.loadAnimation(this,
                            R.anim.anim_translate);
                    img_show.startAnimation(animation);
                    break;
                case R.id.btn_rotate:
                    animation = AnimationUtils.loadAnimation(this,
                            R.anim.anim_rotate);
                    img_show.startAnimation(animation);
                    break;
                case R.id.btn_set:
                    animation = AnimationUtils.loadAnimation(this,
                            R.anim.anim_set);
                    img_show.startAnimation(animation);
                    break;
            }
        }
    }

    运行效果图:

    嘿嘿,有点意思是吧,还不动手试试,改点东西,或者自由组合动画,做出酷炫的效果吧~

    4.动画状态的监听

    我们可以对动画的执行状态进行监听,调用动画对象的:

    • setAnimationListener(new AnimationListener())方法,重写下面的三个方法:
    • onAnimationStart():动画开始
    • onAnimtaionRepeat():动画重复
    • onAnimationEnd():动画结束

    即可完成动画执行状态的监听~

    5.为View动态设置动画效果

    先调用AnimationUtils.loadAnimation(动画xml文件),然后View控件调用startAnimation(anim) 开始动画~这是静态加载的方式,当然你也可以直接创建一个动画对象,用Ja va代码完成设置,再调用 startAnimation开启动画~

    6.为Fragment设置过渡动画

    有个细节很容易被忽略:这里的Fragment,到底用的是v4包里的,还是app包下的Fragment。这个区别不能混淆。处理时,可以通过FragmentTransaction对象的setTransition(int transit)方法,为Fragment设置标准的过场动画;至于transit,可选的取值如下:

    • TRANSIT_NONE:无动画
    • TRANSIT_FRAGMENT_OPEN:打开形式的动画
    • TRANSIT_FRAGMENT_CLOSE:关闭形式的动画

    上面的标准过程动画是两个都可以调用的,而不同的地方则在于自定义转场动画

    setCustomAnimations()方法!

    • app包下的Fragment:setCustomAnimations(int enter, int exit, int popEnter, int popExit),这4个参数别看写法简单,分别对应的其实很清楚:添加时的动画、移除时的动画、入栈时的动画,以及出栈时的动画。还有一个细节很容易被忽略:这里对应的动画类型必须是属性动画(Property Animation)。换句话说,动画文件的根标签需要写成<objectAnimator>、<valueAnimator>,或者把前面两种放进同一个<set>里;

    • v4包下的Fragment: v4包下的则支持两种setCustomAnimations()

    另外要注意一点的是,对应的动画类型是:补间动画(Tween),和上面的View一样~

    可能你会有疑惑,你怎么知道对应的动画类型,其实只要你到Fragment源码那里找下:

    onCreateAnimation()方法的一个返回值就知道了:

    v4包:

    app包:

    7.为Activity设置过场动画

    Activty设置过场动画非常简单,调用的方法是:overridePendingTransition(int enterAnim, int exitAnim)

    用法很简单:在startActivity(intent)或者finish()后添加

    参数依次是:新Activity进场时的动画,以及旧Activity退场时的动画

    下面提供几种比较简单而且常用的过场动画供大家使用~

    下载传送门:Activity常用过渡动画.zip

    8.写个进入APP后登陆注册按钮从底部弹出动画效果的例子:

    运行效果图:

    代码实现:

    首先是我们的布局文件:activity_main.xml:

    
    
    

    接着是MainActivity.ja va:

    public class MainActivity extends AppCompatActivity {
        private LinearLayout start_ctrl;
        @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            start_ctrl = (LinearLayout) findViewById(R.id.start_ctrl);
            //设置动画,从自身位置的最下端向上滑动了自身的高度,持续时间为500ms
            final TranslateAnimation ctrlAnimation = new TranslateAnimation(
                    TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, 0,
                    TranslateAnimation.RELATIVE_TO_SELF, 1, TranslateAnimation.RELATIVE_TO_SELF, 0);
            ctrlAnimation.setDuration(500l);     //设置动画的过渡时间
            start_ctrl.postDelayed(new Runnable() {
                @Override
                public void run() {
                    start_ctrl.setVisibility(View.VISIBLE);
                    start_ctrl.startAnimation(ctrlAnimation);
                }
            }, 2000);
        }
    }

    注释写得很清楚了,这里就不BB解释了,如果你对TranslateAnimation.RELATIVE_TO_SELF这个有疑惑, 请自己谷歌或者百度,限于篇幅(我懒),这里就不写了,蛮简单的~

    9.本节代码示例下载

    AnimationDemo3.zip

    AnimationDemo4.zip

    本节小结:

    本节给大家细细地讲解了下Android中的第二种动画(渐变动画),四种动画的详解,以及 设置动画监听器,还有如何为View,Fragment和Activity设置动画,最后还写了一个进入后 从APP底部弹出登陆按钮和注册按钮的例子,篇幅可能有点长,不过都非常容易理解,相信 大家看完都能够收获满满~!好的,本节就到这里,谢谢~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用 Android
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?