安卓动画:

Android的三种动画,即:
•View Animation(视图动画)
•Drawable Animation(帧动画)
•Property Animation(属性动画)

Drawable Animation(帧动画)
2.1帧动画概述
帧动画是顺序播放一组预先定义好的图片,不同于View动画,系统提供了另外一个类AnimationDrawable来使用帧动画。
2.2帧动画的使用
首先我们找一组帧动画的图片放入drawable-xhdpi文件夹下,其次在drawable文件夹下创建xml文件,如下所示:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
2     >
3    <item android:drawable="@mipmap/r1" android:duration="50" />
4    <item android:drawable="@mipmap/r2" android:duration="50" />
5    <item android:drawable="@mipmap/r3" android:duration="50" />
6    <item android:drawable="@mipmap/r4" android:duration="50" />
7    <item android:drawable="@mipmap/r5" android:duration="50" />
8    <item android:drawable="@mipmap/r6" android:duration="50" />
9    <item android:drawable="@mipmap/r7" android:duration="50" />
10    <item android:drawable="@mipmap/r8" android:duration="50" />
11    <item android:drawable="@mipmap/r9" android:duration="50" />
12    <item android:drawable="@mipmap/r10" android:duration="50" />
13    <item android:drawable="@mipmap/r11" android:duration="50" />
14    <item android:drawable="@mipmap/r12" android:duration="50" />
15    <item android:drawable="@mipmap/r13" android:duration="50" />
16    <item android:drawable="@mipmap/r14" android:duration="50" />
17    <item android:drawable="@mipmap/r15" android:duration="50" />
18    <item android:drawable="@mipmap/r16" android:duration="50" />
19    </animation-list>

必须是根节点,包含一个或者多个元素,属性有:
android:oneshot true代表只执行一次,false循环执行。
类似一帧的动画资源。
animation-list的子项,包含属性如下:
android:drawable 一个frame的Drawable资源。
android:duration 一个frame显示多长时间。
帧动画如果帧数过多容易引起OOM

  //资源animationDrawable = (AnimationDrawable) main_img.getBackground();animationDrawable.start();

View动画的概述及种类
视图动画的作用对象是View,支持四种动画效果,分别是平移动画,缩放动画,旋转动画,透明度动画。譬如,我们可以对TextView设置其文本的移动,旋转,缩放,透明。
视图动画可以通过XML或通过代码动态创建,对于视图动画建议使用XML文件定义,因为它具有更高的可读性,可重用性。
在这里插入图片描述
要使用View动画,首先要创建XML文件,我们需要在res下新建anim文件夹,接着在anim下创建animation resource file的xml文件,我们举例为view_anim.xml
我们通过xml文件来了解它们各自的语法:

1<?xml version="1.0" encoding="utf-8"?>
2<set
3    xmlns:android="http://schemas.android.com/apk/res/android">
//循环动画
//android:repeatMode="restart"
//android:repeatCount="infinite"
4    <!--平移动画标签-->
5    <translate
6        android:fromXDelta="0%p"
7        android:toXDelta="20%p"
8        android:fromYDelta="0%p"
9        android:toYDelta="20%p"
10        android:duration="4000"/>
11    <!--缩放动画标签-->
12    <scale
13        android:fromXScale="1.0"
14        android:toXScale="0.2"
15        android:fromYScale="1.0"
16        android:toYScale="0.2"
17        android:pivotX="50%"
18        android:pivotY="50%"
19        android:duration="4000"/>
20    <!--旋转动画标签-->
21    <rotate
22        android:fromDegrees="0"
23        android:toDegrees="360"
24        android:pivotX="50%"
25        android:pivotY="50%"
26        android:duration="4000"/>
27    <!--透明度动画标签-->
28    <alpha
29        android:fromAlpha="1.0"
30        android:toAlpha="0.2"
31        android:duration="4000"/>
32</set>

从上面的代码我们知道,View动画既可以是单个动画,也可以有一系列动画组成。
这是因为View动画的四种种类分别对应着Animation的四个子类(TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation),除了以上四个子类它还有一个AnimationSet类,对应xml标签为,它是一个容器,可以包含若干个动画,并且内部也可以继续嵌套集合的。
我们在activity对TextView设置动画:

6public class MainActivity extends AppCompatActivity {
78    private TextView textView;
910    @Override
11    protected void onCreate(Bundle savedInstanceState) {
12        super.onCreate(savedInstanceState);
13        setContentView(R.layout.activity_main);
1415        textView = findViewById(R.id.textview);
16        textView.setOnClickListener(new View.OnClickListener() {
17            @Override
18            public void onClick(View v) {
19                Animation animation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.viewanimation);
20                textView.startAnimation(animation);
21            }
22        });
2324    }
25}

动画监听
为了实现一些需求,如动画结束后开始另一个动画或者页面跳转,这时候就需要监听动画。

1 Animation.addListener(new AnimatorListener() {
2          @Override
3          public void onAnimationStart(Animation animation) {
4              //动画开始时执行
5          }
67           @Override
8          public void onAnimationRepeat(Animation animation) {
9              //动画重复时执行
10          }
1112         @Override
13          public void onAnimationCancel()(Animation animation) {
14              //动画取消时执行
15          }
1617          @Override
18          public void onAnimationEnd(Animation animation) {
19              //动画结束时执行
20          }
21      });

xml属性Java方法说明
android:detachWallpaper setDetachWallpaper(boolean)是否在壁纸上运行
android:duration setDuration(long)动画的运行时间(以毫秒为单位);必须设置
android:fillAfter setFillAfter(boolean)动画结束时是否保持动画最后的状态;默认为false,优先于fillBefore
android:fillBefore setFillBefore(boolean)动画结束时是否还原到开始动画前的状态;默认为true
android:fillEnabled setFillEnabled(boolean)是否应用fillBefore的值,对fillAfter无影响;默认为true
android:interpolator setInterpolator(Interpolator)设定插值器(指定的动画效果,譬如回弹等)android:repeatCount setRepeatCount(int)重复次数
android:repeatMode setRepeatMode(int)重复类型有两个值,reverse表示倒序回放,restart表示从头播放
android:startOffset setStartOffset(long)调用start函数之后等待开始运行的时间,单位为毫秒android:zAdjustment setZAdjustment(int)表示被设置动画的内容运行时在Z轴上的位置(top/bottom/normal),默认为normal

属性动画:
属性动画可以看作是增强版的补间动画,与补间动画的不同之处体现在:
•补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的变换,但是属性动画可以定义任何属性的变化。
•补间动画只能对 UI 组件执行动画,但属性动画可以对任何对象执行动画。
与补间动画类似的是,属性动画也需要定义几个方面的属性:
•动画持续时间。默认为 300ms,可以通过 android:duration 属性指定。
•动画插值方式。通过 android:interploator 指定。
•动画重复次数。通过 android:repeatCount 指定。
•重复行为。通过 android:repeatMode 指定。
•动画集。在属性资源文件中通过 <set …/> 来组合。
•帧刷新率。指定多长时间播放一帧。默认为 10 ms。
属性动画 API
•Animator: 提供创建属性动画的基类,基本不会直接使用这个类。
•ValueAnimator:属性动画用到的主要的时间引擎,负责计算各个帧的属性值。
•ObjectAnimator: ValueAnimator 的子类,对指定对象的属性执行动画。
•AnimatorSet:Animator 的子类,用于组合多个 Animator。
除了这些 API,属性动画还提供了一个 Evaluator ,用来控制属性动画如何计算属性值。
•IntEvaluator:计算 int 类型属性值的计算器。
•FloatEvaluator: 用于计算 float 类型属性值的计算器。
•ArgbEvaluator: 用于计算十六进制形式表示的颜色值的计算器。
•TypeEvaluator: 可以自定义计算器。
使用 ValueAnimator 创建动画的步骤:
•调用 ValueAnimator 的 ofInt()、ofFloat() 或者 ofObject() 静态方法创建 ValueAnimator 实例。
•调用 ValueAnimator 的 setXxx() 等方法设置持续时间,插值方式、重复次数等。
•调用 ValueAnimator 的 start() 方法启动动画。
•为 ValueAnimator 注册 AnimatorUpdateListener 监听器,在该监听器中可以监听 ValueAnimator 计算出来的值改变,并将这些值应用到指定对象上。
属性动画的一般使用:
定义属性动画和补间动画等类似,有两种方式:
•使用 ValueAnimator 或者 ObjectAnimator 的静态工厂方法创建动画。
•使用资源文件来定义动画。
属性动画的使用:
•创建 ValueAnimator 或 ObjectAnimator 对象 —— 即可以从 XML 资源文件加载该动画也可以直接调用 ValueAnimator 或者 ObjectAnimator 的静态工厂方法创建动画。
•根据需要为 Animator 对象设置属性。
•如果需要监听 Animator 的动画开始事件,动画结束事件、动画重复事件、动画值改变事件,并根据事件提供响应处理代码,需要为Animator 对象设置监听器。
•如果有多个动画需要同时播放,需要使用 AnimatorSet 组合这些动画。
•调用 Animator 对象的 start 启动动画。

1public void onViewClicked() {
2        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(bawei,"alpha",0,1);
3        ObjectAnimator objectAnimator2=ObjectAnimator.ofFloat(bawei,"rotation",0,360,180,360,150,0);
4        ObjectAnimator objectAnimator3=ObjectAnimator.ofFloat(bawei,"scaleX",1,3,1,2,1);
5        ObjectAnimator objectAnimator4=ObjectAnimator.ofFloat(bawei,"scaleY",1,3,1,2,1);
6        AnimatorSet ans= new AnimatorSet();
78//        ans.playSequentially(objectAnimator,objectAnimator2,objectAnimator3);
9        ans.play(objectAnimator).with(objectAnimator2).before(objectAnimator3).with(objectAnimator4);
10//        第一个参数用于指定这个动画要操作的是哪个控件
11//                第二个参数用于指定这个动画要操作这个控件的哪个属性
12//        //1、透明度:alpha
13//        public void setAlpha(float alpha)
14//
152、旋转度数:rotation、rotationX、rotationY
16//        public void setRotation(float rotation)
17//        public void setRotationX(float rotationX)
18//        public void setRotationY(float rotationY)
19//
203、平移:translationX、translationY
21//        public void setTranslationX(float translationX)
22//        public void setTranslationY(float translationY)
23//
24缩放:scaleX、scaleY
25//        public void setScaleX(float scaleX)
26//        public void setScaleY(float scaleY)
2728//        第三个参数是可变长参数,这个就跟ValueAnimator中的可变长参数的意义一样了,就是指这个属性值是从哪变到哪。
29      //无线循环objectAnimator1.setRepeatCount(-1);//时间
30        ans.setDuration(6000);
31        ans.setInterpolator(new DecelerateInterpolator());//差值器
32        ans.start();
33    }

插值器与估值器:
什么是插值器
通俗易怪的说,Interpolator责控制动画变化的速率,使得基本的动画致果能够以匀速.加 速、减速、抛物线速率等各种速率变化.
动画是开发者给定开始和结束的”关键帧区变化的”中间帧”是有系统计算决定然后攜故岀来G 因此,动画的每一帧都将在开始和堵束之间的特定时间显示。此时动画时间被转换为时间素引,则动画 时间轴上的每个点都可以转换成D.0到1.0之间的一个浮点数。然后再将该值用于计算该对象的线性变 换.在变换的情况下,y辅上,。.。对应于起始位置,1.对应于堵束位置,0.5对应于起始和结束之间 的中间,对于一些插值器演值还可以是卜1之外的数值"
什么是估值器
TypeEvaluator (类型估值算法,即估值器):
作用:根据当前届性改变的百分比来计鼻改变后的鳳性值.
系统已有的估值器
11.1 IntEvalufitori针对整型屬性 i^FLoatEvaluator:针对浮点型属性 '^ArgbEvaluator-针对Colo匸履性
§0 T iniE 1 n ter p o 1 a l o r ^pe E v el u a to r 是怎么协同工作的昵?
它们是实现非匀速动画的重要手段。属性动画是对屑性做动画.周性要实现劫画,首先由 Tirnelnterpolatar (插值器}根据时间流逝的百分比计再出当前fit性值改变的百分比.并且插值器 将这个百分比返回.这个时候疝值器的工作眈完成了.比如插值器返回的值是很显然我们要的不 是•,而是当前届性的值,即当前底性变成了什么值,这就需要估值器根据当前曜性改变的百分比来 计算改变后的属性0根据这个履性團我们就可以设實当前隴性的值了.

在这里插入图片描述

               `Animation animation = AnimationUtils.loadAnimation(this, R.anim.a);AccelerateDecelerateInterpolator accelerateDecelerateInterpolator = new AccelerateDecelerateInterpolator();animation.setInterpolator(accelerateDecelerateInterpolator);img_dong.startAnimation(animation);

`本文章借鉴于老顾的有道云笔记:https://note.youdao.com/ynoteshare/index.html?id=9eaa8a70ef4db36ef41844d41ea79e25&type=note

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

安卓手机开机动画制作原理教程

先说开机动画实现原理&#xff1a; Android的动画是由一系列的连续PNG图片作为帧组成的动画形式。 不是合成为一张GIF图片&#xff0c;而是一个文件包&#xff0c;将各帧PNG图片以压缩方式保存。 这个保存的文件名就是bootanimation.zip&#xff0c;这个文件是zip压缩文件&a…

安卓之动画制作

1.知识图谱 &#xff08;补间动画和帧动画&#xff09; 1.补间动画的效果图&#xff1a; &#xff08;alpha透明度&#xff09; &#xff08;ratate旋转&#xff09; XML代码&#xf…

Android BT

整个bluedroid可以分为两大模块&#xff1a;BTIF&#xff0c;BTE BTIF&#xff1a;提供bluedroid对外的接口;作为bluedroid与上层的framework提供interface。所以它处于bluedroid的顶层。 BTE&#xff1a;bluedroid的内部处理&#xff0c;又细分为BTA&#xff0c;BTU&#xf…

04.BT下载

04.BT下载 下载&#xff0c;是很多网络用户必备的需求之一。以往我们使用现成工具迅雷&#xff0c;我们必须保持开机&#xff0c;会员&#xff0c;合法等等要求&#xff0c;但是依托服务器&#xff0c;我们其实也可以搭建BT下载工具&#xff0c;只要你的硬盘够用&#xff0c;把…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

mysql 存储用户头像_node+vue用户头像处理上传并保存

2017年7月14日19:21:29 &#xff0c;最近做个网站&#xff0c;需要有用户头像裁剪上传功能&#xff0c;具体流程是用户在本地选择图片&#xff0c;前端将图片裁剪好发给后端&#xff0c;后端接收到图片将它保存起来&#xff0c;并将信息存入数据库。 先说一下环境后端是express…

java 根据用户名生成头像。

先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; im…

支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

支付宝小程序serverless—获取用户信息&#xff08;头像&#xff09;并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 我又回…

湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf

一、链接 1260 Completed String 二、题目 题目描述 给一个字符串&#xff0c;请判断字符串是否出现了所有的英文字母&#xff08;不区分大小写&#xff09;。 输入 每行一个只含英文字母的字符串&#xff0c;长度不超过1000。 输出 每行输出一个样例的结果&#xff0c…

openCV配置+cmake操作记录--Ubuntu 16.04版本

项目需要openCV相关操作,于是找了好多教程,琢磨了好久,写个笔记。 更新ubuntu上的一些库: sudo apt-get update sudo apt-get upgrade 安装一些库:(虽然我现在也不明白这玩意,我是纯小白/(ㄒoㄒ)/~~) sudo apt-get install cmake sudo apt-get install build-essen…

笔记2:openCV打开摄像头显示到QT的QLabel--Ubuntu系统

目的: 通过openCV调用摄像头,把捕捉到的画面显示到QT的QLabel控件上。 听起来很easy的样子,我的coding能力很弱,可以找个我是理学院出身的借口,但现实是谁会听你的借口呢,希望这笔记不是给我未来参考的,而是为了博未来的自己一笑,那样才能说明我是进步的哈。 效果:…

【二叉树】1-5,理论基础、前中后序遍历的递归法和迭代法、层序遍历

理论基础、前中后序遍历的递归法和迭代法、层序遍历 1&#xff0c;二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 2&#xff0c;存储方式链式存储线式存储 3&#xff0c;二叉树的遍历深度优先搜索前序遍历&#xff08;递归法、迭代法&#xff09;中序遍历&#xff0…

fork创建多个子进程

fork创建多个子进程 示例代码 fork1.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main(int argc,char **argv) {int i, j;pid_t pid;for (i 0; i < 3; i){pid fork();if (pid < 0){perror(&q…

苹果6换屏多钱_iPhone12屏幕维修多少钱 苹果12换屏价格汇总

苹果iPhone12系列手机如果屏幕坏了要维修换屏的话&#xff0c;需要多少钱呢&#xff0c;官方的换屏价格是多少&#xff0c;这里我们来了解下iPhone12系列手机官方渠道换屏价格。 1、iPhone12保外屏幕维修费用 2149元&#xff0c;iPhone12Pro屏幕维修费用2149元&#xff0c;由于…

合并两个有序链表

就像一个贪吃蛇将两个链表一一的吃进来 class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""p ListNode(0)cur pwhile list1 a…

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

Flink CDC系列之:TiDB CDC 导入 Elasticsearch

Flink CDC系列之&#xff1a;TiDB CDC 导入 Elasticsearch 一、通过docker 来启动 TiDB 集群二、下载 Flink 和所需要的依赖包三、在TiDB数据库中创建表和准备数据四、启动Flink 集群&#xff0c;再启动 SQL CLI五、在 Flink SQL CLI 中使用 Flink DDL 创建表六、Kibana查看Ela…

b站 APP 产品体验报告

参考链接 https://www.jianshu.com/p/3dda6a6f050e 虽然B站在很多情况下被认为其主要的用户群体是ACG&#xff08;Animation、Comic、Game&#xff09;爱好者&#xff0c;但现在随着其内容不断丰富&#xff0c;用户体验不断改良&#xff0c;用户群体也随之拓展。因此&#xff0…

最简单版B站视频下载

最近想在电脑端缓存一些b站的视频&#xff0c;发现缓存不了&#xff0c;手机端是可以缓存的&#xff0c;但是比如有些课程&#xff0c;还是直接在电脑缓存比较方便些&#xff0c;整了一个小时左右&#xff0c;终于解决了&#xff0c;今天出一篇博客分享一下&#xff0c;有需要的…

基于Cordova的 B站用户直播闹钟app(安卓版)

前言 本项目基于Cordova开发&#xff0c;打包的apk支持Android9&#xff0c;主要功能为 监听b站用户直播情况&#xff0c;开播进行闹钟提示 ps&#xff1a;目前版本还是有蛮多问题的&#xff0c;如有遇到可以及时反馈&#xff0c;我会想办法进行修复。 源码下载 码云 GitHub…