Android动画学习Demo(1) 关于ViewAnimation的用法及总结

android 动画 demo 这个项目是用androidstudio写的,功能包括Frame动画、Tween动画、属性动画、fragment设置过度动画、Activity设置过场动画等。里面的代码可以直接使用。 立即下载

在Android系统中,提供了两种动画框架:

1)View Animation(视图动画),而View Animation 里面又包含了下面两种模式

1.1)Tween Animation (也称之为View Animation,狭义的,不过现在官方也将之为View Animation了)

1.2)Frame Animation (也称之为Drawable Animation)

2)Property Animation(属性动画),这是在Android 3.0(API Level 11)之后才支持的框架。

所以,不考虑层次,只考虑实现,Android中就存在以下三种动画框架:

1)View Animation

2)Drawable Animation

3)Property Animation

今天我们就来讲一下View Animation(Tween Animation)的用法,然后最后总结一下关于View Animation 的优缺点。

简单地说,View Animation提供了一些在View上简单的动画效果,包括Tranlsate(平移),Rotate(旋转),Scale(缩放)和 Alpha(透明)这几种动画效果。

我们先来看一下效果图:



简单说明一下:

1)前面四个按钮分别代表了四种效果,点击执行对应的效果

2)如果fromXml被选中的话,表明效果是从xml加载的,如果没有选中,则是在Java中定义的

3)每种效果都可以通过Interpolator按钮来选择对应的Interpolator,这里只简单用了五种插值器。

4)Set为了方便展示,没有添加Alpha的效果,其它三种都加了,可以通过下面的Sequence和simultaneous单选按钮来选择是顺序播放还是同时播放各种效果。

下面我们说说View Animation都是怎么实现的。

View Animation的实现方式有两种:一是在XML中定义;二是在Java 代码中定义

XML 定义

1. Scale(缩放)

首先我们要先在 res/amin/中创建一个定义动画的xml文件,就叫transform.xml吧(这里要注意,关于View Animation的动画效果,都是要放在 /res/anim 路径下的) 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.5"
    android:toYScale="0.5"
    android:repeatCount="1"
    android:repeatMode="reverse" />
关于scale的参数有:

fromXScale, fromYScale:X/Y 方向开始的比例(1.0 就是原来比例的1.0倍)

toXScale, toYScale:X/Y 方向最终的比例

pivotX, pivotY:缩放的轴(50则是在其父容器50%的位置,,加上百分号,50%,则是相对于其本身,也就是绕其中心)

2. Translate (平移)

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXDelta="0"    
    android:toXDelta="100"
    android:fillAfter="true" />
关于translate的参数有:

fromXDelta : 平移开始的位置

toXDelta:      平移结束的位置

3. Rotate (旋转)

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromDegrees="-180"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:toDegrees="0" />
fromDegrees : 开始的角度 

toDegrees    : 结束的角度

pivotX, pivotY:旋转的轴

4. Alpha (透明 )

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:duration="1000"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:toAlpha="0" />
fromAlpha: 开始时的透明度(1.0 完全不透明, 0 完全透明,等于不见了)

toAlpha:结束时的透明度

5. 共有的属性

每个动画我们都必须设置通过Duration来设置其时长,不然的话,没有时间,谈何动呢。

duration:动画的时长 

而repeatCount和repeatMode等则不是必须的,但可以应用到每个动画效果上。

repeatCount:重复的次数

repeatMode:reverse (从结束位置反过来进行动画),restart(在开始位置重新开始动画)。

fillAfter :当为true的时候,动画会停在结束的那一刻。

fillBefore:当为true的时候,动画结束后,当前View会停留在开始的那一刻。

等等等,就不多说了。

6.在Java中调用 

当把这些参数都定义好之后,那么就可以在Java中调用我们定义好的这个动画文件了,具体代码如下:

if (cbFromXml.isChecked()) {
    animation1 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.transform1);
    animation2 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.transform2);
    animation3 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.transform3);
    animation4 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.transform4);
}

把定义的动画效果通过 AnimationUtils.loadAnimation这个方法拿出来,将通过view的startAnimation函数,将animation设置给view,并开始运行。

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			animation1.setStartOffset(0);
			v.startAnimation(animation1);
			break;
这样,我们就可以在上面的效果图中看到各种的效果了。

当然,这只是一种效果的动画,那我们如果要将各种效果同时进行,或者按顺序来进行,怎么办呢?

我们可以通过定义Set,来实现这个效果:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

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

    <scale
        android:duration="2000"
        android:fromXScale="0.5"
        android:fromYScale="0.5"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="2.0"
        android:startOffset="2000"
        android:toYScale="2.0" />

</set>

而在Java中,调用方法是一样的。在上面的设置中,每个动画效果都有一个startOffset参数,是设置动画开始的偏移量的,如果我们要动画顺序执行,那我们就必须设置各个效果的偏移时间,如上面,rotate是马上执行的,而scale效果会在2秒后才执行,刚好在rotate效果执行之后。

Java中定义

那么在Java中该如何定义呢?请直接看代码吧,很简单的。
animation1 = new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f,50,50); //Scale Animation
animation1.setDuration(DURATION);
animation1.setRepeatCount(1);
animation1.setInterpolator(interpolator);
animation1.setRepeatMode(Animation.REVERSE);

animation2 = new RotateAnimation(0, 180, 50, 50); //Rotate Animation
animation2.setDuration(DURATION);			
animation2.setRepeatCount(1);
animation2.setInterpolator(interpolator);
animation2.setRepeatMode(Animation.REVERSE);

animation3 = new TranslateAnimation(0, 100, 0, 0); //Translate Animation
animation3.setDuration(DURATION);			
animation3.setRepeatCount(1);
animation3.setInterpolator(interpolator);
animation3.setRepeatMode(Animation.REVERSE);

animation4 = new AlphaAnimation(1.0f, 0f); //Alpha Animation
animation4.setDuration(DURATION);			
animation4.setRepeatCount(1);
animation4.setInterpolator(interpolator);
animation4.setRepeatMode(Animation.REVERSE);

animationSet = new AnimationSet(false);   //Animation Set
animationSet.addAnimation(animation1);
animationSet.addAnimation(animation2);
animationSet.addAnimation(animation3);

设置的各种属性其实是一一对应于我们在XML中定义的各种属性的,定义好了之后,其实就跟XML中定义好并加载到Java代码中之后一样,直接调用View.startAnimation函数就可以了,在这里就不详细说了。

总结

View Animation 其实是非常简单的,而且很容易用,一般如果不需要太复杂的效果,其实是够用的了。
那么它到底有什么优缺点呢,为什么在3.0后还要再加入Property Animation呢?
1)View Animation, 顾名思义,只能用在View上面,没法用在非View的对象上,比如我们自定义出来的对象
2)只是提供了有限的几种效果,比如旋转,平移,缩放和透明,如果我们要实现其他的效果,则没有办法。。。
3)动画效果执行完之后,只是在界面上重画了这个View,而View的实际位置跟属性其实是没有变化的。怎么理解呢,比如一个按钮,我们将它从左边移到右边了,在界面上看到这个按钮已经在右边了,但是当我们去点击它的时候,却没有事件响应,只有当回原来的位置的时候,事件才被响应,就是说,人跑了,心还留在原地。从下面这个效果图,我们看得很明显:


而property Animation就不会存在这个问题,请看下一篇文章关于Property Animation的用法:

Android动画学习Demo(2) 关于Property Animation的用法及总结

源代码请点击

Rope DFM一键整合包AI脸部替换教程:使用DeepFaceLab模型实现专业级视频和直播脸部替换 在AI脸部替换工具中,Rope凭借其出色的自动遮罩处理拔得头筹,结合DFM模型中的DFL XSeg遮罩处理,效果更是提升了一个台阶。因为在训练模型时,它已经通过大量的侧脸图片进行训练,达到了单张图片无法企及的效果。然而,想要通过DeepFaceLab获得专业级的效果,不仅难度大,时间成本也相当高,训练模型也是个不小的挑战。举个简单的例子,使用图片脸部替换时,如果佩戴眼镜,脸部替换后的可能会显得很假。另外,在视频中,比如歌手演唱时,话筒遮挡住脸部,这种场景也可以通过遮罩训练后的模型来处理,呈现出更逼真的效果。 阅读详情

相关推荐

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

ViewAnimation的基本使用方法

Android的ViewAnimation由四种基本类型组成: 1、scale:伸缩动画 2、alpha:透明度变化动画 3、rorate:旋转动画 4、translate:平移动画 一、首先是用xml方式实现四种基本类型及其组合动画效果。 先说一下它们从Animation类继承的属性: android:duration        设置动画

miyuexingchen的专栏 579

【生信】全基因组测序(WGS)

1、全基因组测序(WGS) 的定义 2、GWS流程 2.1准备工作——分析软件 2.2原始数据质控 2.3数据预处理 2.4变异检测

weixin_40695088的博客 4万+

Android中动画之视图动画(View Animation)

目录 Android中动画之视图动画(View Animation) 一、概述 Android中的动画分为:View Animation(视图动画)和Property Animation(属性动画)。 其中 View Animation包括:Tween Animation(补间动画)和 Frame Animation(逐帧动画)。 Property Animation包括:Value...

qq_38812469的博客 406

ROS机器人全覆盖路径规划实战:6种ipa算法对比与选型指南(附避坑经验)

本文深入对比了ROS中ipa_coverage_planning功能包集成的6种全覆盖路径规划算法,包括牛耕分解、栅格旅行商、神经网络、局部能量最小、轮廓线和凸感知放置。文章从覆盖率、重复率、计算效率、动态避障等核心工程指标出发,提供了基于不同场景(如静态/动态环境、规则/复杂布局)的实战选型指南,并分享了神经网络和局部能量最小等关键算法的参数调优与避坑经验,旨在帮助开发者根据实际需求选择并优化最合适的ipa覆盖算法。

perl8的博客 364

硬全桥副边钳位管Vds电压凸台揭秘——寄生参数引发的导通异常

本文深入分析了硬全桥副边钳位管Vds电压凸台现象,揭示了寄生参数如何引发导通异常。通过波形分析和工程实践,详细解析了走线电感的蓄能效应和体二极管的接力作用,并提供了PCB布局优化、元件选型和驱动电路调整等解决方案,帮助工程师有效应对这一常见问题。

weixin_30825581的博客 430

ViewAnimator教程

本文翻译自ViewAnimator Tutorial With Example In Android Studio 在Android中,ViewAnimator是FrameLayout的一个子类,用来做Views之间的切换。它是一个变换控件的 元素,帮助我们在Views之间(如TextView, ImageView或者其他layout)添加变换。它有助于在屏幕view添加动画。

zhanhong39的专栏 7312

★教程3:Simulink学习教程入门60例目录

1.订阅本教程用户可以免费获得本博任意1个(包括所有免费专栏和付费专栏)博文对应代码;2.本Simulink课程的所有案例(部分理论知识点除外)均由博主编写而成,供有兴趣的朋友们自己订阅学习使用。未经本人允许,禁止任何形式的商业用途;3.本课程除了介绍常见的Simulink模块介绍之外,我们更侧重于各种实例的完整设计介绍。从通信,控制器,图像处理,语音处理,电力系统等诸多常用领域介绍了相关案例,如果对于某个较为复杂的案例,初学者无法正确复现,也可以私信博主获得完整Simulink模型文件。

FPGA/MATLAB学习教程/源码/项目合作开发 1万+

Android动画学习Demo(2) 关于Property Animation的用法及总结

在上一篇文章中,我们知道了关于View Animation的用法及其一些局限性,而在3.0之后,Android 引入了Property Animation 的框架,弥补了View Animation的一些短板,使得我们在Android中能够更好地借助框架去实现更复杂更好的动画效果,从而创造出漂亮的用户体验。 ... 这一篇文章我们先来了解 一下Property Animation的一些用法,在知其然的基础上,下一篇文章我们再来讨论Property Animation的机制原理。 首先我们要先了解关于View

持剑 1万+

Q3D提取PCB走线RLCG参数

介绍一种提取PCB走线寄生电容和寄生电感的方法

sinat_15150363的博客 2923

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1152

动画学习android,教你如何高效学习Android动画

原标题:教你如何高效学习Android动画想来很多学习Android动画的小白刚刚入门的时候都会遇到一种尴尬情况,就是看了很多大牛的帖子和Demo但是缺无法形成一个系统的操作体系。操作时总是感觉无从下手,本文华清创客学院工程师在这里和读者分享一下如何高效学习Android动画? 如何高效学习Android动画:本文主要介绍在实际工作中常用或者会接触到的Android Animation大概可以分成...

weixin_29813635的博客 145

Lammps实现甲烷与水的竞争吸附-循环不同气体分子

Lammps实现甲烷与水的竞争吸附

Rockyoung 5375

初识属性动画——使用Animator创建动画

属性动画不仅仅能作用于View,而能作用于任何对象。 与ViewAnimation的区别 ViewAnimation只支持几种动画:scale、transition、rotate、alpha四种类型。并且缺陷是只是改变了显示位置,实际位置并没有改变。 一个demo解释一切,如下图: Hello按钮使用ViewAnimation进行移动,点击事件在移动后,但是响应还在最初的位置;而属性动画移动的W...

xingfeng_coder的博客 1283

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

1.5.38 Android Animation学习(三) ApiDemos解析:XML动画文件的使用

    可以用XML文件来定义Animation。      文件必须有一个唯一的根节点:   &lt;set&gt;, &lt;objectAnimator&gt;, or &lt;valueAnimator&gt;三者之一。   对应的Java类是: ValueAnimator - &lt;animator&gt; ObjectAnimator - &lt;objectAnimato...

u012913404的专栏 572

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android Animation学习(三) ApiDemos解析:XML动画文件的使用

From: http://www.cnblogs.com/mengdd/archive/2013/09/05/3303403.html Android Animation学习(三) ApiDemos解析:XML动画文件的使用     可以用XML文件来定义Animation。   文件必须有一个唯一的根节点:   , , or 三者之一。   对应的Java类是: Value

fyfcauc的专栏 523

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android animation学习笔记之view/drawable animation

前一章中总结了android animation中property animation的知识和用法,这一章总结View animation和Drawable animation的有关知识:     View animation就是网上常讲的tweened animation,android.view.animation包包括了tweened animation用到的所有的类,Demo请看

让我们一起摇摆 1192

android 动画

Android动画学习Demo(1) 关于ViewAnimation的用法及总结 http://www.2cto.com/kf/201401/274745.html Android动画学习Demo(2) 关于Property Animation的用法及总结 http://www.2cto.com/kf/201401/275043.html Android动画学习Demo(3) http:...

weixin_30763455的博客 62

Android高级应用开发(深入篇) stage3(下)- 高级商用界面开发 学习笔记

动画 动画实质是什么 ? Android动画实现机制 Android动画分类及编写方式

程序猿的专栏 2509

帅气的属性动画赏析(Property Animation)

权利声明:转载请注明出处http://blog.youkuaiyun.com/hello_chillax今天我们来学习Android中的一个比较好玩的动画效果:Property Animation、でわ、はじめましょう。一,初めに:动画的分类 Android动画分类:View Animation,Drawable Animation,Property Animation。各自能实现的效果:View Anima

企鹅肖 1282
上一篇: Android学习小Demo(4)贝塞尔曲线跟翻页效果
下一篇: Android动画学习Demo(2) 关于Property Animation的用法及总结
linmiansheng
博客等级 码龄20年 507粉丝 111原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值