Android中的动画有哪几类?各自的特点和区别是什么?

在 android.view.animation包中有四种基本的动画 ,透明/伸缩/移动/旋转。
动画类型
Android的animation由四种类型组成
XML中
alpha
渐变透明度动画效果
scale
渐变尺寸伸缩动画效果
translate
画面转换位置移动动画效果
rotate
画面转移旋转动画效果
JavaCode中
AlphaAnimation
渐变透明度动画效果
ScaleAnimation
渐变尺寸伸缩动画效果
TranslateAnimation
画面转换位置移动动画效果
RotateAnimation
画面转移旋转动画效果
Android动画模式
Animation主要有两种动画模式:
一种是tweened animation(渐变动画)
XML中
JavaCode
alpha
AlphaAnimation
scale
ScaleAnimation
一种是frame by frame(画面转换动画)
XML中
JavaCode
translate
TranslateAnimation
rotate
RotateAnimation
Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;
在做项目的过程中,客户要求从左至右播放一次动画的过程,就是采用的是补间动画,设置了动画播放的时间,开始位置与起始位置,播放完毕回到原来的起始位置。

Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
在项目过程中,在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="@drawable/wait_1" android:duration="80" />
    <item android:drawable="@drawable/wait_2" android:duration="80" />
    <item android:drawable="@drawable/wait_3" android:duration="80" />
    <item android:drawable="@drawable/wait_4" android:duration="80" />
    <item android:drawable="@drawable/wait_5" android:duration="80" />
    <item android:drawable="@drawable/wait_6" android:duration="80" />
    <item android:drawable="@drawable/wait_7" android:duration="80" />
    <item android:drawable="@drawable/wait_8" android:duration="80" />
    <item android:drawable="@drawable/wait_9" android:duration="80" />
    <item android:drawable="@drawable/wait_10" android:duration="80" />
    <item android:drawable="@drawable/wait_11" android:duration="80" />
    <item android:drawable="@drawable/wait_12" android:duration="80" />
</animation-list>

类似于一个等待的过程,不断地加载图片,达到动画的效果。


Android 中的动画有帧动画,补间动画,属性动画,她们的忑点和使用方法如下:

###帧动画
> 一张张图片不断的切换,形成动画效果
* 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长    
        <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
            <item android:drawable="@drawable/g1" android:duration="200" />
            <item android:drawable="@drawable/g2" android:duration="200" />
            <item android:drawable="@drawable/g3" android:duration="200" />
        </animation-list>
* 在屏幕上播放帧动画
        ImageView iv = (ImageView) findViewById(R.id.iv);
        //把动画文件设置为imageView的背景
        iv.setBackgroundResource(R.drawable.animations);
        AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
        //播放动画        
        ad.start();
###补间动画
* 原形态变成新形态时为了过渡变形过程,生成的动画就叫补间动画
* 位移、旋转、缩放、透明
#####位移:
* 参数10指的是X的起点坐标,但不是指屏幕x坐标为10的位置,而是imageview的 真实X + 10
* 参数150指的是X的终点坐标,它的值是imageview的 真实X + 150    
        //创建为位移动画对象,设置动画的初始位置和结束位置
        TranslateAnimation ta = new TranslateAnimation(10, 150, 20, 140);
* x坐标的起点位置,如果相对于自己,传0.5f,那么起点坐标就是 真实X + 0.5 * iv宽度
* x坐标的终点位置,如果传入2,那么终点坐标就是 真实X + 2 * iv的宽度
* y坐标的起点位置,如果传入0.5f,那么起点坐标就是 真实Y + 0.5 * iv高度
* y坐标的终点位置,如果传入2,那么终点坐标就是 真实Y + 2 * iv高度
        TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2);
* 动画播放相关的设置
        //设置动画持续时间
        ta.setDuration(2000);
        //动画重复播放的次数
        ta.setRepeatCount(1);
        //动画重复播放的模式
        ta.setRepeatMode(Animation.REVERSE);
        //动画播放完毕后,组件停留在动画结束的位置上
        ta.setFillAfter(true);
        //播放动画
        iv.startAnimation(ta);
#####缩放:
* 参数0.1f表示动画的起始宽度是真实宽度的0.1倍
* 参数4表示动画的结束宽度是真实宽度的4倍
* 缩放的中心点在iv左上角
        ScaleAnimation sa = new ScaleAnimation(0.1f, 4, 0.1f, 4);
* 参数0.1f和4意义与上面相同
* 改变缩放的中心点:传入的两个0.5f,类型都是相对于自己,这两个参数改变了缩放的中心点
* 中心点x坐标 = 真实X + 0.5 * iv宽度
* 中心点Y坐标 = 真实Y + 0.5 * iv高度
    ScaleAnimation sa = new ScaleAnimation(0.1f, 4, 0.1f, 4, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
#####透明:
* 0为完全透明,1为完全不透明
        AlphaAnimation aa = new AlphaAnimation(0, 0.5f);
#####旋转:
* 20表示动画开始时的iv的角度
* 360表示动画结束时iv的角度
* 默认旋转的圆心在iv左上角
        RotateAnimation ra = new RotateAnimation(20, 360);
* 20,360的意义和上面一样
* 指定圆心坐标,相对于自己,值传入0.5,那么圆心的x坐标:真实X + iv宽度 * 0.5
* 圆心的Y坐标:真实Y + iv高度 * 0.5
        RotateAnimation ra = new RotateAnimation(20, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
---
#属性动画
* 补间动画,只是一个动画效果,组件其实还在原来的位置上,xy没有改变
###位移:
* 第一个参数target指定要显示动画的组件
* 第二个参数propertyName指定要改变组件的哪个属性
* 第三个参数values是可变参数,就是赋予属性的新的值
* 传入0,代表x起始坐标:当前x + 0
* 传入100,代表x终点坐标:当前x + 100

        //具有get、set方法的成员变量就称为属性
        ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 100) ;

###缩放:
* 第三个参数指定缩放的比例
* 0.1是从原本高度的十分之一开始
* 2是到原本高度的2倍结束

        ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "scaleY", 0.1f, 2);
###透明:
* 透明度,0是完全透明,1是完全不透明
        
        ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "alpha", 0.1f, 1);
###旋转
* rotation指定是顺时针旋转
* 20是起始角度
* 270是结束角度
        ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotation", 20, 270);
* 属性指定为rotationX是竖直翻转
* 属性指定为rotationY是水平翻转
        ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotationY", 20, 180);
###可变参数
* 第三个参数可变参数可以传入多个参数,可以实现往回位移(旋转、缩放、透明)
        ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 70, 30, 100) ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不指导,一起学习

不敢说指导&#xff0c;只能说以自己的观点来说下这个事情。年前的时候&#xff0c;我一个朋友的朋友也想学电子方面的技术&#xff0c;他毕业后做汽修工作&#xff0c;但是没做多久没离职了&#xff0c;之后在工厂上班一段时间&#xff0c;最近两年帮亲戚一起打理一些生意上的…

linux按键检测结束,关于Linux下按键的检测

写这篇博客是因为自己想做一个fc模拟器&#xff0c;核心代码(6502和ppu的模拟代码)用的原子开发板的代码&#xff0c;人家是从pc向单片机移植&#xff0c;我是反过来了&#xff0c;不过因为写的不错&#xff0c;用函数指针代替了switch方法可以学习一下&#xff0c;so就用了它的…

(翻译)Tricks of the windows game programming Gurus(Windows游戏大师之路) --- 前言(作者:ANDRE LAMOTHE 1999)...

前言&#xff1a;在一篇零编程学习游戏编程的文章文章中提及此书&#xff0c;而且书评很不错&#xff0c;在当时反响很剧烈。因此下了个PDF版的慢慢学习。虽然接触游戏编程很久&#xff0c;玩的五花八门的游戏也有很多&#xff0c;但真正完成的游戏只有一个扫雷游戏。文章中建议…

C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置

先看几个概念&#xff1a; 1、bss是英文block started by symbol的简称&#xff0c;通常是指用来存放程序中未初始化的全局变量的一块内存区域&#xff0c;在程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定&#xff0c;用户应…

如何阅读3,500万个博客?

博客至今已经出现5年了&#xff0c;目前这股热潮正在愈演愈烈。博客又叫网络日志&#xff0c;现在已经非常普及&#xff1b;跟踪3,500多万个博客的Technorati Inc.称&#xff0c;博客的总数量每6个月就增加一倍。这就带来了一个问题&#xff1a;如何从浩如烟海的信息中找到想要…

u-boot与bootloader及其区别

Bootloader比Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道&#xff0c;windows开机时会首先加载bios&#xff0c;然后是系统内核&#xff0c;最后启动完毕。那么bootloader就相当于手机的bios&#xff0c;它在手机启动的时候根据基带初始化硬件&#xff0c;然后…

assets目录与res/raw目录下文件的区别

assets目录与res/raw目录下文件的区别 assets目录下的文件不会被编译成二进制&#xff0c;直接被打包到apk中。 assets目录中的文件不会在R.Java中建立索引。 assets目录下的文件需借助AssetManager访问。 assets目录下可以建立自己的子目录。 res/raw目录下的文件会被编译成二…

linux gdb 忽略信号,linux gdb调试基本命令

近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令&#xff0c;希望能帮到大家。linux gdb调试基本命令1.启动调试前置条件&#xff1a;编译生成执行码时带上 -g&#xff0c;如果使用Makefile&#x…

Adobe Dreamweaver 添加库、标签和属性

您可以在 Dreamweaver 中使用标签库编辑器添加标签库&#xff0c;并将标签和属性添加到标签库中。 添加一个标签库在标签库编辑器&#xff08;“编辑”>“标签库”&#xff09;中&#xff0c;单击加号 () 按钮&#xff0c;然后选择“新建标签库”。在“库名称”框中&#xf…

白话debounce和throttle

遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件&#xff0c;如果不进行性能的优化&#xff0c;就可能会出现页面卡顿的现象&#xff0c;比如&#xff1a; 鼠标事件&#xff1a;mousemove(拖曳)/mouseover(划过)/mouseWheel(滚屏)键盘事件&#xff1a;keypress(基于…

Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)

Windows平台下使用Active Directory对Subversion进行权限控制&#xff08;非完美解决方案&#xff09; Windows平台下使用Active Directory对Subversion进行权限控制&#xff08;非完美解决方案&#xff09; 目前网上找到的Subversion的配置说明中&#xff0c;关于用户权限控制…

wireshark抓包工具的使用及分析

前段时间看到群里在讨论Wireshark抓包工具&#xff0c;想写一篇使用笔记但一直没来得及写&#xff0c;本篇就通过实例来分享wireshark抓包工具的使用。Wireshark简介 Wireshark 是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包&#xff0c;并尽可能显示出最为详…

EventLoop笔记

node环境 Event Loop各阶段&#xff1a; - timers 阶段&#xff1a;这个阶段执行 setTimeout 和 setInterval 的回调函数。- I/O callbacks 阶段&#xff1a;不在 timers 阶段、close callbacks 阶段和 check 阶段这三个阶段执行的回调&#xff0c;都由此阶段负责&#xff0c…

如何实现android和服务器长连接呢?推送消息的原理

转载地址&#xff1a;http://blog.csdn.net/q376420785/article/details/8653958 前言&#xff1a;现在的大多数移动端应用都有实时得到消息的能力&#xff0c;简单来说&#xff0c;有发送消息的主动权和接受消息的被动权。例如&#xff1a;微信&#xff0c;QQ&#xff0c;天气…

linux入门系统那个好,初学Linux哪个发行版本好?这些更合适!

Linux是非常受欢迎的技术&#xff0c;现在很多人都开始转行学习Linux&#xff0c;不过大家都知道Linux发行版本众多&#xff0c;在学习的时候我该选择哪个发行版本呢?为大家介绍一下。其实在挑选Linux发行版本之前&#xff0c;我们首先要根据自己的需求决定。如果抱着试试的心…

git 使用及常用命令介绍

一、git 常用命令 git clone 地址 克隆项目 git status 查看当前状态 git add 文件或文件夹 &#xff08;加入本地暂存目录&#xff09; git commit -m "注释" 提交到本地版本库&#xff08;暂存区&#xff09; git commit -a -m "注释" 提交全部改动文件 …

asp.net中的记忆盲区

<1> 连接数据库 用read方法取出数据 在web.config取出连接字符串 string sqlconn ConfigurationManager.ConnectionStrings["db_showHouseConnectionString"].ToString(); SqlConnection connnew SqlConnection (sqlconn ); SqlComman…

调试网络收发不通问题

今天在做之前一个项目重构的事情&#xff0c;需要把之前的代码重新做功能&#xff0c;我们有两个设备&#xff0c;他们通过网线连接&#xff0c;用UDP来传输数据。很多人都怀疑UDP丢包什么&#xff0c;不及时什么之类的&#xff0c;如果想把事情做得足够快&#xff0c;最好还是…

VB6.0和VB.Net对照表

想在网上找一下VB.Net中&#xff0c;哪些是VB6.0遗留下来的东西&#xff0c;哪些是VB.Net增加的东西。结果中文的没有找到&#xff0c;找到了一个日文网页。简单的翻译了一下&#xff0c;放在这里&#xff0c;供需要的人参考。 VB6.0和VB.Net的对照表VB6.0VB.NETAddItem Object…

hibernate的初次使用

转载地址&#xff1a;http://blog.csdn.net/aboy123/article/details/10222675 一、Hibernate概述 &#xff08;一&#xff09;什么是Hibernate&#xff1f; hibernate核心内容是ORM&#xff08;关系对象模型&#xff09;。可以将对象自动的生成数据库中的信息&#xff0c;使…