Android动画

article/2025/8/21 21:08:06

        这篇博客主要总结一下自己在项目中对动画的一些使用。我写博客,其实更多的是总结自己在工作中用到的一些知识。比如某一段时间一个知识点相关的技术用的比较多,那我会总结一下。其实,对于Android动画的总结,这是几个月前就应该写完的一篇博客,然而那段时间工作实在是太忙了,没有及时去总结。于是,今天把这篇博客提上来,总结一下Android中动画的一些使用。

一、前言

        在总结动画的使用前,我们先想想为我们的app添加动画的目的是什么?毫无疑问,为APP添加动画,会使我们的app界面更加美丽,效果更加华丽,这样也能吸引更多的用户使用我们的app。就好比自己的亲儿子或者亲闺女,我们总想把她(他)打扮的漂亮点。但是,是不是动画一定是好的呢?或者说,动画越多越好吗?当然也不是,其实在我们的app中添加动画,也会带来一些问题,最主要的就是耗电量增加。毫无疑问,华丽的动画效果会带来大量的电量消耗。因此,并不是说app都应该添加很多绚丽的动画,而应适度的添加。

二、动画

        这个小节,按照分类大体总结一下Android常用动画的基本使用方法。作为Android开发,或者正在学习Android的朋友,大家对于Android动画的分类肯定不陌生。Android动画包括补间动画,帧动画,属性动画。

1、补间动画

        首先,简单说一下什么是补间动画。补间动画是使一个物体由一个状态转变为另一种状态的动画。通俗来讲,定义一个补间动画,我们只需要给定物体的初始属性和终止属性,而中间的变化过程由补间动画自己实现。那么,这些状态包括什么呢?相信大家都知道,包括旋转,缩放,位置,透明度。

        我们看一下补间动画的几个子类:AlphaAnimation,RotateAnimation,ScaleAnimation,TranslateAnimation,分别对应透明度动画,旋转动画,缩放动画,平移动画。此外,还包括AnimationSet,这是Android提供的把多个补间动画组合为一个动画的机制,我们后面会讲。如下图所示:

(1)AlphaAnimation

        AlphaAnimation是控制物体透明度变化的动画,它的使用很简单,我们简单看一下AlphaAnimation的部分源码,如下所示。使用AlphaAnimation,可以使用Java代码,也可以使用xml代码,我们只看Java中使用的构造函数。需要两个变量:fromAlpha和toAlpha,也就是初始的alpha值和终止的alpha值。通过注释,我们可以看到alpha值的范围是0.0-1.0。

public class AlphaAnimation extends Animation {private float mFromAlpha;private float mToAlpha;/*** Constructor to use when building an AlphaAnimation from code* * @param fromAlpha Starting alpha value for the animation, where 1.0 means*        fully opaque and 0.0 means fully transparent.* @param toAlpha Ending alpha value for the animation.*/public AlphaAnimation(float fromAlpha, float toAlpha) {mFromAlpha = fromAlpha;mToAlpha = toAlpha;}
}

        看过上面的构造函数,我们也尝试着去写一个简单的AlphaAnimation,动画有很多属性我们可以设置,例如时间,重复次数,重复模式等,我们在这里只设置一个持续时间:

    private void initAlpha(){alphaAnimation = new AlphaAnimation(1.0f,0.2f);alphaAnimation.setDuration(2000);imageView.startAnimation(alphaAnimation);}

(2)ScaleAnimation

        缩放动画是对物体进行缩放的补间动画,我们看一下ScaleAnimation的源码,看一下其构造函数。可以看到,比透明度动画的参数要多。不难理解,因为缩放涉及到x方向和y方向,因此需要传入四个值:

    public ScaleAnimation(float fromX, float toX, float fromY, float toY) {mResources = null;mFromX = fromX;mToX = toX;mFromY = fromY;mToY = toY;mPivotX = 0;mPivotY = 0;}

        我们尝试实现一个简单的缩放动画:

private void initScale(){animation = new ScaleAnimation(1.0f,0.5f,1.0f,0.5f);animation.setDuration(2000);imageView.startAnimation(animation);}

(3)TranslateAnimation

        TranslateAnimation是实现物体平移的动画,我们还是简单看一下其构造函数,也是四个值。因为涉及到x和y两个方向的平移:

private void initTrans(){animation = new TranslateAnimation(0,180,0,360);animation.setDuration(2000);imageView.startAnimation(animation);}

        下面,我们实现一个简单的平移动画:

    private void initTrans(){animation = new TranslateAnimation(0,180,0,360);animation.setDuration(2000);imageView.startAnimation(animation);}

 (4)RotateAnimation

        RotateAnimation是控制物体旋转的动画。我们都知道,旋转一个物体,需要有一个参考点。

  • RotateAnimation(float, float):

        让物体围绕(0,0)从一个角度旋转到另一个角度。这里的(0, 0)其实就是物体的左上角,构造参数如下:

public RotateAnimation(float fromDegrees, float toDegrees) {mFromDegrees = fromDegrees;mToDegrees = toDegrees;mPivotX = 0.0f;mPivotY = 0.0f;}

        我们实现一个这样的旋转动画,也就是让物体围绕自己的左上角顶点旋转:

private void initRotate(){animation = new RotateAnimation(0,360);animation.setDuration(2000);imageView.startAnimation(animation);}
  • RotateAnimation(float, float, float, float):

        除了传入初始的角度和终止的角度外,还传入了一对坐标,也就是旋转参考点的坐标:

  •     public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) {mFromDegrees = fromDegrees;mToDegrees = toDegrees;mPivotXType = ABSOLUTE;mPivotYType = ABSOLUTE;mPivotXValue = pivotX;mPivotYValue = pivotY;initializePivotPoint();}

    我们实现一个让物体围绕自己的中心点旋转的动画:

  • private void initRotate(){animation = new RotateAnimation(0,360,imageView.getWidth()/2,imageView.getHeight()/2);animation.setDuration(2000);imageView.startAnimation(animation);}


http://chatgpt.dhexx.cn/article/D1MZ4jmL.shtml

相关文章

Android动画之帧动画

在Android开发时,为了实现一些动态的炫酷的效果,我们常用到帧动画,View动画(补间动画)和属性动画,今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画? 帧动画就是顺序播放一组预先定…

【Android】动画

概念 动画实际上就是在指定的时间段内持续的修改某个属性的值,使得该值在指定取值范围之内平滑的过渡 android中的动画分为:View动画、帧动画和属性动画 帧动画 Frame动画是一系列图片按照一定的顺序展示的过程,它的原理是在一定的时间段内切…

STM32 LWIP SNTP实现毫秒级的时间校准

1、首先配置LWIP支持SNTP 然后在opt.h中增加一个timeout->LWIP_SNTP 防止出现类似 Assertion "sys_timeout: timeout ! NULL, pool MEMP_SYS_TIMEOUT is empty" failed at line 190 in ../Middlewares/Third_Party/LwIP/src/core/timeouts.c 这样的错误。 /*…

NTP/SNTP协议介绍和校时服务器搭建

文|Seraph 本文主要简单介绍用于校时的NTP/SNTP协议 同时,以windows 2008 R2为例,搭建NTP/SNTP服务器 NTP可参考文献RFC1305,SNTP可参考文献RFC1796 1. 应用场景 一般应用,连上公网即可通过NTP/SNTP协议进行校时,例如…

linux sntp 代码,C语言window(linux)平台的SNTP实现

C语言实现window(linux)平台的SNTP,本程序功能主要是实现电脑(或者设备)时间同步。摘录部分代码: unsigned char liVnMode; /* LeapSecond(2bits:0), VersionNumber(3bits: 3), Mode(3bits: Client3, Server4) */ unsigned char stratum; /* 时间层级 (0…

学习日记——ESP8266SNTP

SNTP基本知识 1、定义 SNTP是简单网络时间协议,而NTP网络时间协议就是网络计算机上同步计算时间的协议,具有高度的精确性,实际上也用不到这么高精度的算法。所以就在NTP上简化了以下变成SNTP,SNTP协议主要被用来同步因特网上计算…

WiFi开发|ESP8266模组SDK开发之SNTP协议

ESP8266模组SDK开发之SNTP协议 1. NTP和SNTP NTP 是网络时间协议(Network Time Protocol),是用来同步网络设备(如计算机、手机)的时间的协议 SNTP由NTP改编而来(简单网络时间协议,Simple Net…

ESP8266学习笔记(11)——SNTP接口使用

一、SNTP简介 简单网络时间协议(Simple Network Time Protocol),由 NTP 改编而来,主要用来同步因特网中的计算机时钟 二、SNTP接口 SNTP 接口位于 ESP8266_NONOS_SDK/include/sntp.h。 三、初始化SNTP 设置三个时间服务器…

ESP32 SNTP配置

SNTP,Simple Network Time Protocol(简单网络时间协议),用来同步时钟。 百度百科:SNTP SNTP协议采用客户端/服务器的工作方式,可以采用单播(点对点)或者广播(一点对多点&…

通过sntp同步系统时间

通过sntp同步系统时间 小型物联网设备,很少有接口提供给用户进行数据交互,那么我们设备的系统时间只能够通过获取网络时间后,再更新到本地。那么,就少不了使用sntp协议。 ntp协议:NTP(Network Time Protocol&#xff…

2012系统sntp服务器,如何设置SNTP服务器,实现同步PLC时钟

在过程/生产自动化系统构架和运行时,有时需要实现对时间的精确控制,即系统中所有子系统(包括设备等)的时间必须保持同步。 作为自动化系统组成部分的 以Windows 7操作系统为例,将PC机配置为SNTP服务器端的操作步骤: [注意]操作前前…

ESP32学习笔记(41)——SNTP接口使用

一、SNTP简介 简单网络时间协议(Simple Network Time Protocol),由 NTP 改编而来,主要用来同步因特网中的计算机时钟。 SNTP 协议是用来同步本地的时间到 unix 时间戳。通常嵌入式设备上电,连接 AP(access point)&…

物联网专题27:SNTP

什么是SNTP(Simple Network Time Protocol)?简单时钟控制协议,主要用来同步因特网中的计算机时钟。 SNTP,使用的默认端口号是 UDP123。 ESP8266中,SNTP相关的API: 1 设置SNTP服务器&#xff08…

ESP8266-----SNTP获取网络时间

目录 前言 user_init IP定时的回调函数 初始化SNTP SNTP定时回调函数 前言 介绍了8266如何获取网络时间 user_init 首先将8266设置为sta模式 void ICACHE_FLASH_ATTR user_init(void) {uart_init(115200,115200); // 初始化串口波特率os_delay_us(10000); // 等待串口…

微软 sntp服务器地址,电脑sntp服务器地址

电脑sntp服务器地址 内容精选 换一换 当创建文件系统后,您需要使用云服务器来挂载该文件系统,以实现多个云服务器共享使用文件系统的目的。本章节以Windows 2012版本操作系统为例进行NFS文件系统挂载,其他版本请参考以下主要步骤根据实际界面…

ESP32 SNTP设置

SNTP,Simple Network Time Protocol(简单网络时间协议),用来同步时钟。 百度百科:[SNTP](https://baike.baidu.com/item/sntp/4749147?fraladdin) SNTP协议采用客户端/服务器的工作方式,可以采用单播&…

sntp服务器位置,sntp的服务器地址

sntp的服务器地址 内容精选 换一换 介绍常见的安全组配置示例。如下示例中,出方向默认全通,仅介绍入方向规则配置方法。不同安全组内的云耀云服务器内网互通仅允许特定 IP 地址远程连接云耀云服务器SSH远程连接Linux云耀云服务器RDP远程连接Windows云服务器公网ping云耀云服务…

sntp 校时问题

1、背景 由于项目中的数据对时间比较敏感,目前常常出现校时问题,导致时间偏差,出现曲线数据丢失和曲线数据重复等问题。 因此对sntp源码进行深入分析。 要了解SNTP,首先需要了解NTP协议。SNTP是NTP的子集,简化了NTP…

ESP8266_SNTP(Simple Network Time Protocol)

1、SNTP 简单网络时间协议 SNTP协议采用客户端/服务器的工作方式,以UDP方式通信,SNTP服务器通过接收GPS信号或自带的原子钟作为系统的时间基准。 网络中存在很多台SNTP服务器,客户端会选择几台SNTP服务器使用。如果一台SNTP服务器在工作过程…

WIFI学习六(SNTP)

简介 SNPT(Simple Network Time Protocal简单网络时间协议)用于跨广域网或局域网时间同步的协议,具有较高的精确度(几十毫秒)。SNTP是NTP协议的简化版 SNTP的工作方式 SNTP协议采用客户端/服务器的工作方式&#xff0…