安卓的基本的动画介绍

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

    我相信对于安卓开发者,在进行企业面试的时候总会被问到安卓动画的相关知识,在自己的项目开发中也或多或少用到相关的动画。每每开到别人的app里面的炫酷动画,我们总是在想,我那个x,这么炫酷,怎么实现的呢?其实道理很简单,万丈高楼平地起,不积跬步难千里,我相信只要一点一滴的去了解,熟悉,掌握这些动画的细节,那样你才能精通这些动画,相信日积月累,当你在用动画的时候就像打开一个Activity那样的简单微笑

  一   首先给大家介绍一下安卓有哪几种动画类型:

                    1 Tween Animation(补间动画也是常用的view的动画)。

                     2 Frame Animation(帧动画,从某种意义上来讲也属于补间动画,只是动画的表示的形式不同).

                     3 Property Animation(属性动画,Android 3.0 API 11以后引进的).

     二   各个动画的详细介绍:

                     1 Tween Animation :补间动画很简单明了,我们只需要去关注开始和结束的“关键帧”,其中间的过程西东直接帮我们去操作了,不需要我们“一帧帧”去定义了。

                         Android使用Animation代表抽象动画,包括四种子类:AlphaAnimation(透明度动画)、ScaleAnimation(缩放动画)、TranslateAnimation(位移动画)、RotateAnimation(透明度动画)。Android里面允许在java中创建Animation类对象,但是一般都会采用动画资源文件来定义动画,把界面与逻辑分离,同时也建议大家通过xml的方式来实现补间动画。

      以下是我们项目中xml形式实现补间动画的片段:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="@android:integer/config_mediumAnimTime"
     android:interpolator="@android:anim/decelerate_interpolator"
     android:shareInterpolator="false">

    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>

    <translate
        android:fromXDelta="0%"
        android:fromYDelta="100%"
        android:toXDelta="0%"
        android:toYDelta="0%"/>
</set>

            对于具体怎么用补间动画我下一篇会讲解。

                    2 Frame Animation : 这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理,给我们带来动画的感觉。它的原理的GIF图片、电影播放原理一样,其实早期的电影也正是用一张张图片的快速滚动来实现的,当然可以在xml中定义也可以在java代码中定义。

      下面看一个逐帧动画xml的定义:

<?xml version="1.0" encoding="utf-8"?>  
<!-- android:oneshot:是否循环;true-不循环, false-循环 -->  
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
    android:oneshot="false">  
    <item android:drawable="@drawable/freedom1" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom2" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom3" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom4" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom5" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom6" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom7" android:duration="50"></item>  
    <item android:drawable="@drawable/freedom8" android:duration="50"></item>  
</animation-list> 
        像平时项目中的菊花转圈加载一般用的就是逐帧动画,将一群不同状态的图片组合起来不断连续播放来达到想要的效果。

                  3 Property Animation :属性动画,这个是在Android 3.0中才引进的,它可以直接更改我们对象的属性。在上面提到的Tween Animation中,只是更改View的绘画效果而View的真实属性是不改变的。假设你用Tween动画将一个Button从左边移到右边,无论你怎么点击移动后的Button,他都没有反应。而当你点击移动前Button的位置时才有反应,因为Button的位置属性木有改变。而Property Animation则可以直接改变View对象的属性值,这样可以让我们少做一些处理工作,提高效率与代码的可读性。

        属性动画我介绍详细点,大家心里先有个轻微的认识:
1)ValueAnimator:包含Property Animation动画的所有核心功能,如动画时间,开始、结束属性值,相应时间属性值计算方法等。应用ValueAnimator有两个步骤

1计算属性值。

2根据属性值执行相应的动作,如改变对象的某一属性。

我们的主是第二步,需要实现ValueAnimator.onUpdateListener接口,这个接口只有一个函数onAnimationUpdate(),将要改变View对象属性的事情在该接口中do。

animation.addUpdateListener(new AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        //do your work
    }
});

2)ObjectAnimator:继承自ValueAnimator,要指定一个对象及该对象的一个属性,当属性值计算完成时自动设置为该对象的相应属性,即完成了Property Animation的全部两步操作。实际应用中一般都会用ObjectAnimator来改变某一对象的某一属性,但用ObjectAnimator有一定的限制,要想使用ObjectAnimator,应该满足以下条件:

1.对象应该有一个setter函数:set(驼峰命名法,大家可以自行百度

2如下面的例子,像ofFloat之类的工场方法,第一个参数为对象名,第二个为属性名,后面的参数为可变参数,如果values…参数只设置了一个值的话,那么会假定为目的值,属性值的变化范围为当前值到目的值,为了获得当前值,该对象要有相应属性的getter方法:get

3如果有getter方法,其应返回值类型应与相应的setter方法的参数类型一致。

ObjectAnimator oa=ObjectAnimator.ofFloat(tv, alpha, 0f, 1f);
oa.setDuration(3000);
oa.start();

如果不满足上面的条件,我们只能乖乖的使用ValueAnimator来创建动画。

3)Animator.AnimatorListener:可以为Animator设置动画监听,需要重写下面四个方法。

onAnimationStart()
onAnimationEnd()
onAnimationRepeat()
onAnimationCancel()

这里我们也可以实现AnimatorListenerAdapter,他的好处是可以只用定义想监听的事件而不用实现每个函数却只定义一空函数体。如下:

anim.addListener(new AnimatorListenerAdapter() {
    public void on AnimationEnd(Animator animation){
        //do your work
    }
});

4)AnimationSet:可以组合多个动画共同工作

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(anim1).before(anim2);
bouncer.play(anim2).with(anim3);
bouncer.play(anim2).with(anim4)
bouncer.play(anim5).after(amin2);
animatorSet.start();

上面的代码意思是: 首先播放anim1;同时播放anim2,anim3,anim4;最后播放anim5。

5)TimeInterplator:与Tween中的interpolator类似。有以下几种先简单介绍下:

AccelerateInterpolator      加速,开始时慢中间加速

DecelerateInterpolator       减速,开始时快然后减速

AccelerateDecelerateInterolator  先加速后减速,开始结束时慢,中间加速

AnticipateInterpolator       反向 ,先向相反方向改变一段再加速播放

AnticipateOvershootInterpolator  反向加回弹,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值

BounceInterpolator        跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100

CycleIinterpolator         循环,动画循环一定次数,值的改变为一正弦函数Math.sin(2 * mCycles * Math.PI * input)

LinearInterpolator         线性,线性均匀改变

OvershottInterpolator       回弹,最后超出目的值然后缓慢改变到目的值

TimeInterpolator         一个接口,允许你自定义interpolator,以上几个都是实现了这个接口

6)Keyframes:可以让我们定义除了开始和结束以外的关键帧。KeyFrame是抽象类,要通过ofInt(),ofFloat(),ofObject()获得适当的KeyFrame,然后通过PropertyValuesHolder.ofKeyframe获得PropertyValuesHolder对象,如下:

Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(width, kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn, pvhRotation);
上述代码的意思是:设置btn对象的width属性值使其:开始时 Width=400,动画开始1/4时 Width=200,动画开始1/2时 Width=400,动画开始3/4时 Width=100,动画结束时 Width=500。

7)ViewPropertyAnimator:对一个View同时改变多种属性,非常推荐用这种。该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图。而且使用起来非常简便,但是要求API LEVEL 12,即Android 3.1以上。仅需要一行代码即可完成水平、竖直移动

myView.animate().translationX(50f). translationY(100f);

8)常需要改变的一些属性:

translationX,translationY: View相对于原始位置的偏移量

rotation,rotationX,rotationY: 旋转,rotation用于2D旋转角度,3D中用到后两个

scaleX,scaleY: 缩放比

x,y: View的最终坐标,是View的left,top位置加上translationX,translationY

alpha: 透明度

    三 各个动画的优缺点:

   (1) Tween Animation(补间动画)仅需定义开始与结束的关键帧,而变化的中间帧由系统补上,优点是不用准备每一帧,缺点是只改变了对象绘制,而没有改变View本身属性。因此如果改变了按钮的位置,还是需要点击原来按钮所在位置才有效。

          (2 )Frame Animation( 帧动画 ) 主要用于播放一帧帧准备好的图片,类似 GIF 图片,优点是使用简单方便、缺点是需要事先准备好每一帧图片,而且如果图片过大容易导致OOM,所以用的时候要谨慎;

   (3) Property Animation(属性动画)3.0后推出的动画,优点是使用简单、降低实现的复杂度、直接更改对象的属性、几乎可适用于任何对象而仅非View类,缺点是需要3.0以上的API支持,限制较大!但是目前国外有个开源库nineoldandroids,可以提供低版本支持大家可以研究下!

   下片会分别介绍各种动画的具体用法,不喜勿喷!







Android 动画 在 Android 中,动画是实现动态效果的重要工具。Android 提供了多种动画框架,主要包括 属性动画、视图动画 和 帧动画 阅读详情

相关推荐

安卓应用开发——Android Studio中图片动画效果的实现

在一些软件中我们常在其中看到一些小部件的动画效果,有位移、透明度、缩放、旋转等画面的变动,像小视频的连续点亮小红心的效果就是这些功能的组合所形成。而,在软件应用开发中为了让界面和效果更好看,今天让我们一起来学习一下小红心的动画效果是怎么实现的。

2303_76399326的博客 1884

Android动画之旅-Android动画基本介绍

在上一篇博客中,我们简单了解了在Android中的动画特效,小伙伴们是不是意犹未尽呀。还没有看的猛戳这里:Android动画之旅一开篇动画简介 本篇博客,将和大家一起来分析Android中的四大动画,准备好了吗?GO~ GO~ GO~ Android动画大致可以分为以下四类: (1)逐帧动画(Frame Animation) (2)补间动画(Tween Animation) (3)属性动

... 3206

深度剖析 Android Animation 框架

属性动画(Property Animation):通过改变对象的属性值来实现动画效果。视图动画(View Animation):通过改变视图的外观来实现动画效果。过渡动画(Transition Animation):用于在视图之间切换时实现平滑的过渡效果。这些动画类型各有特点,适用于不同的场景。接下来,我们将从架构设计、使用指南、设计模式和核心逻辑等方面进行详细分析。Android Animation 框架提供了丰富的动画类型和强大的功能,开发者可以通过这些框架实现各种复杂的动画效果。

zhangjiaofa的专栏 1515

android最全的动画讲解

android的动画一共分为三种,view动画,帧动画,属性动画

xueyoubangbang的博客 7184

Android 动画详解

Android动画的分类与使用学习Android必不可少的就是动画的使用了,在Android版本迭代的过程中,出现了很多动画框架,这里做一个总结。Android动画类型分类逐帧动画【Frame Animation】,即顺序播放事先准备的图片。补间动画【Tween Animation】,View的动画效果可以实现简单的平移、缩放、旋转。属性动画【Property Animation】,补间动画增强版,支持对对象执行动画

金戈鐡馬 5786

Android--Animation动画基本使用与介绍

一、Animation动画基本介绍 Animation,是一个可以实现Android UI界面动画的效果,同时,Animation也提供了一系列的动画效果,其中分别有:透明度动画、收缩动画、位移动画、旋转动画。这些动画效果绝大多数可以运用在控件中。 二、Animation动画的类型 Android中Animation动画的类型分为四部份类型组成: 1、Alpha——渐变透明度动画

Amanduzhuojiang的博客 2397

Android三种动画(属性、视图、帧动画介绍基本使用

Android三种动画介绍与属性动画基本使用Android动画基本可以分为三类: View Animation(视图动画)、Property Animation:(属性动画)和Drawable Animation(帧动画)。其中视图动画早在Android老版本就已经支持了,只能对view控件编辑动画。属性动画是Android在3.0版本后推出的API,是Google为了解决视图动画推出的,可以对

tang_vincent的博客 575

【Android-动画】属性动画基本介绍及使用方式

首先,我们要区别属性动画与补间动画的区别: 属性动画:真正改变了控件的属性 补间动画:视觉现象,没有改变都控件真正的值(如:当控件发送位置变化时,如果设置了点击事件,只有控件原位置的地方才有点击事件!) 属性动画重要的两个类: ValueAnimator ObjectAnimator.ofFloat() ———————————————————————————————— 以一个textVie...

qq_40716430的博客 629

Android动画--属性动画简单介绍基本用法(二)

转载请标明出处: http://blog.csdn.net/android_it/article/details/51140609 本文出自:【冯帅的CSDN博客】 上一篇我们说到的逐帧动画和补间动画,这篇我们着重说下属性动画:Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation),它的功能非常强大,弥补了之前补间动画的一些

2148

Android动画--逐帧动画和补间动画简单介绍基本用法(一)

转载请标明出处: http://blog.csdn.net/android_it/article/details/51133030 本文出自:【冯帅的CSDN博客】 Android系统给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张

5982

Android-Property_Animation介绍基本实现(属性动画

属性动画 补间动画,只是一个动画效果,组件其实还在原来的位置上,xy没有改变 位移: 第一个参数target指定要显示动画的组件 第二个参数propertyName指定要改变组件的哪个属性 第三个参数values是可变参数,就是赋予属性的新的值 传入0,代表x起始坐标:当前x + 0 传入100,代表x终点坐标:当前x + 100 //具有get、set方法的成

Android、HTML、CSS、JS、JAVA、Kotlin、PHP等技术 834

安卓(Android)属性动画

安卓的属性动画分为四种类型:平移,旋转,缩放,渐显 四个动画对应四个不同的方法 但是操作的步骤都是一样的 唯一一个就是 渐显 比较简单点 平移:TranslateAnimationDuration代表的是运行一次的时间 RepeatMode代表的是以什么样的模式展示 参数很多 大家可以试试 ReoeatCont是你要运行多少次 TranslateAnimation translateAnimation = new TranslateAnimation(0,100,0,100); ...

zx_xzzx的博客 583

Android动画之视图动画

前言       动画在Android中是一个相当于重要的知识点,使用场景也很多,炫酷的界面效果少不了动画来提升,这里我们就先来说说Android中的动画,在说Android的动画之前,我们先来了解一下动画这个效果的通用含义。什么是动画?       我们在平常生活中,经常会遇到动画这个词,大家也不要想歪了,可不是大家理解的岛国xx片哦!,那动画究竟是什么呐?在不同的场景中,这个词的名词解释都不一样

freeCode 3240

【Android】View动画—XML动画、帧动画

1. XML 动画基本结构每个动画文件都是一个 XML 文件,以<set><alpha><scale><rotate>之一作为根元素。根标签:可使用<set>组合多个动画,或者单独使用<alpha><scale><rotate>。属性:设置动画的起始值、目标值、时间等。2. 透明度动画(AlphaAnimation)??????????????效果:View从完全透明到完全显示。代码加载动画3. 缩放动画(ScaleAnimation)fromXScaletoXScale:X 轴缩放比例。

2301_79977698的博客 1505

Android 属性动画详解,属性动画基本用法!

Hello,大家好,今天要给大家讲的是Android 属性动画详解! 在Tween动画的讨论中,我们提到在Android中动画可以分为三类:①帧动画②Tween(补间动画)③Property Animation(属性动画),在前面的文章中,分别对帧动画和Tween动画进行了非常详细的讨论,如果有兴趣可以去上面的链接去阅读。那么今天就来和大家一起讨论下Property Animation,相信通过

yeana1的博客 2800

安卓动画入门教程 Animation in Android(1)

安卓动画入门教程 Animation in Android概述安卓有强大的动画,不管是view的动画,还是Activity切换的动画安卓有三种动画系统,但最重要的就是属性动画(property animations)。属性动画允许我们去给任何的对象的属性增加动画。这个属性动画可以应用到安卓应用的任何东西。一个典型的用法就是给view动态的运动,比如说位置的高棉,旋转,扩展大小或animation者颜色变化。安卓中的

请叫我搞向 1850

实现安卓Activity流畅动画切换:源码解析

本文还有配套的精品资源,点击获取 简介:本文深入探讨了在安卓开发中通过源码实现四种基本动画类型:translate(平移)、scale(缩放)、alpha(透明度变化)以及rotate(旋转),并将这些动画应用于Activity切换过程,增强用户界面的流畅性和动态性。文章首先介绍每种动画的效果和创建方法,然后详细说明了如何设置动画监听器、应用动画、组合多个动画,并最终启动动...

weixin_35751194的博客 1924
上一篇: 安卓SharedPreference的详解及总结
下一篇: 安卓补间动画的详解
暖风清
博客等级 码龄10年 4粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值