展开说说:Android动画使用

动画是通过把物变化分解成许多瞬间的动作,给视觉造成连续变化的图画。 "Animation" 一词源自于拉丁文anima,意思为“灵魂”,动词animate是“赋予生命”的意思,引申为使某物活起来的意思。Android动画分为三种:帧动画、补间动画、属性动画。

依次说一下他们的使用:

1、帧动画

帧动画的本质是好多drawable依次播放。

第一步需要在res目录下drawable文件夹新建一个xml文件,我这是frameanimation.xml。

第二部将frameanimation.xml设置给ImageView组件

第三步通过ImageView组件获取AnimationDrawable

第四步使用AnimationDrawable实例去执行或者关闭动画。

这里是具体代码实现:

1.1第一步创建 frameanimation.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/round_spinner_fade_00" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_01" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_02" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_03" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_04" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_05" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_06" android:duration="100"/>
    <item android:drawable="@mipmap/round_spinner_fade_07" android:duration="100"/>
</animation-list>

1.2 第二步 这里可以在xml中<ImageView标签设置也可以通过java代码设置

android:background="@drawable/frameanimation"

或者

animIv.setImageResource(R.drawable.frameanimation);

1.3 第三步

AnimationDrawable animationDrawable = (AnimationDrawable) animIv.getDrawable();

1.4 第四步

animationDrawable.start();   //执行动画
animationDrawable.stop();    //关闭动画

2、补间动画

补间动画其实徒有其表,为啥呢?因为你看着它懂了但实际他没动,能相应点击事件的位置还是老地方。

补间分为平移动画translate、缩放动画scale、旋转动画rotate、透明度动画alpha以及动画合集set,用发基本类似此处以缩放动画为例。

第一步 需要在res目录下新建anim文件夹在其中新建一个Animation Resource File文件,我这是scale_anim.xml。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:repeatMode="restart">
<scale android:pivotY="0.5" android:pivotX="0.5" android:fromXScale="1.0" android:fromYScale="1.0" android:toXScale="0.3" android:toYScale="0.3" android:repeatCount="5"/>
</set>
  • 使用AnimationUtils加载动画
scaleAnimation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.scale_anim);
  • 设置播放时长
scaleAnimation.setDuration(2000);
  • 设置重复次数
scaleAnimation.setRepeatCount(1); 
  • 开启动画和关闭动画
animIv.startAnimation(scaleAnimation);  //开启
scaleAnimation.cancel();   //关闭
animIv.clearAnimation();  //清除动画

补充:

补间动画也可以在java代码中实现,这里其实完成了上面的第一步和第二部,有了animation对象其他的都一样了。

rotateAnimation = new RotateAnimation(0.0f, 360.0f, 0.5f, 0.5f);

这里用scale的举例,translate、scale、rotate、alpha用发也是类似,只有动画合集set相对特殊他是一个集合可以放这四种任何一个或者多个,建立Animation文件时系统自动创建了set标签
(2)补间动画必须设置duration时长,否则无效不会执行的或者瞬间只闪一下。

  1. 如果xml中已经配置了repeatCount此处设置重复次数将不再生效,想要这里生效就别在xml中适配;这个属性是重复次数,因此你设置2就一共三遍设置5一共执行6遍。

3、属性动画

属性动画是通过动态改变了对象属性实现动画效果 它不会像补间动画那样看似变化了但View的位置不变动画执行后响应范围也是随之改变。是真正意义上的动画,而且应用范围很广不局限用作用于view,因此使用范围也最广。

属性动画Animator是个抽象类,有三个子类ValueAnimator、AnimatorSet,而TimeAnimator和ObjectAnimator是ValueAnimator的子类、我们都是在使用他们四个实现动画

这里以属性动画的平移、缩放、透明度、旋转为例:

第一步 定义这些动画

private ObjectAnimator translationXAnimation() {
    //参数第三个是一个可变参数,填写一个是想要移动的距离多个参数会在这几个参数的位置移动
    ObjectAnimator transXAnimator = ObjectAnimator.ofFloat(animIv, "translationX", -1800, 300,600,-200,80);
    transXAnimator.setDuration(2000);
    transXAnimator.setRepeatCount(0);
    return transXAnimator;
}

private ObjectAnimator translationYAnimation() {
    ObjectAnimator transYAnimator = ObjectAnimator.ofFloat(animIv, "translationY", 100, 400);
    transYAnimator.setDuration(2000);
    transYAnimator.setRepeatCount(0);
    return transYAnimator;
}

private ObjectAnimator scaleXAnimation() {
    ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(animIv, "scaleX", 0.0f, 2.0f);
    scaleXAnimator.setDuration(2000);
    scaleXAnimator.setRepeatCount(0);
    return scaleXAnimator;
}


private ObjectAnimator scaleYAnimation() {
    //参数第三个是一个可变参数,缩放渐变
    ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(animIv, "scaleY", 0.0f, 2.0f);
    scaleYAnimator.setDuration(2000);
    scaleYAnimator.setRepeatCount(0);
    return scaleYAnimator;
}

private ObjectAnimator alphaAnimation() {
    //参数第三个是一个可变参数,不管几个参数会在这几个参数之间改变透明度
    ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(animIv, "alpha", 1.0f, 0.8f, 0.6f, 0.4f, 0.3f, 0.0f);
    alphaAnimator.setDuration(2000);
    alphaAnimator.setRepeatCount(-1);//-1是一直重复
    alphaAnimator.setRepeatMode(ObjectAnimator.RESTART);//reverse表示到临界值反向恢复,1.0-0.0然后0.0-1.0周而复始;restart表示1.0-0.0然后又1.0-0.0
    return alphaAnimator;
}

private ObjectAnimator rotateAnimation() {
    //参数第三个是一个可变参数,填写一个没效果不报错,两个是想要旋转的的距离from-to,多个参数会在这几个参数的角度旋转
    ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(animIv, "rotation", 0f,360f,0f);
    objectAnimator.setDuration(2000);
    return objectAnimator;
}

第二步 执行动画  每一个都可调用start方法单独执行

transXAnimator.start();
transYAnimator.start();
scaleXAnimator.start();
scaleYAnimator.start();
alphaAnimator.start();
rotateAnimator.start();
可以用上面的animator单独开启动画或者使用使用animatorset开启动画合集
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(rotateAnimator, alphaAnimator, scaleXAnimator, scaleYAnimator, transXAnimator, transYAnimator);
animatorSet.start();

第三步 停止动画

animSet.cancel();
animIv.clearAnimation();

下一篇记录一下插值器和估值器以及自定义属性动画。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言扫雷游戏完整实现(上)

文章目录 前言一、新建好头文件和源文件二、实现游戏菜单选择功能三、定义游戏函数四、初始化棋盘五、 打印棋盘函数六、布置雷函数七、玩家排雷菜单八、标记功能的菜单九、标记功能菜单的实现总结 前言 C语言从新建文件到游戏菜单&#xff0c;游戏函数&#xff0c;初始化棋盘…

【1762】java校园单车投放系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java校园单车投放管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

【Linux】文件权限类命令

在Linux中&#xff0c;文件权限是构建多用户操作系统的基础元素&#xff0c;它确保了每个用户只能在其权限范围内操作文件. 0位表示类型 在Linux中第一个字符代表这个文件是什么类型的 符号文件类型-文件d目录l链接文档 1-3位确定属主(该文件的所有者),拥有该文件的权限 4-…

【面试经典 150 | 二叉树】二叉树展开为链表

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;前序遍历方法二&#xff1a;同步进行方法三&#xff1a;原地操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&am…

图像处理的基本操作

一、PyCharm中安装OpenCV模块 二、读取图像 1、基本语法 OpenCV提供了用于读取图像的imread()方法&#xff0c;其语法如下&#xff1a; image cv2.imread&#xff08;filename&#xff0c;flags&#xff09; &#xff08;1&#xff09;image&#xff1a;是imread方法的返回…

opencv可视化图片-----c++

可视化图片 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>// 将数据类型转换为字符串 std::string opencvTool::type2str(int type) {std::string r;uchar depth type & CV_MAT_DEPTH_MASK;uchar chans 1 (typ…

机械臂模型更换成自己的urdf模块

1.将urdf生成slx文件 smimport(rm_65_flange.urdf);%生成Simscape物理模型 2.更换joint部分&#xff08;对应与几个输入几个输出&#xff09;&#xff08;依次更换&#xff09; 3.更改关节部分&#xff08;依次更换&#xff09; 找到urdf文件夹下的meshes文件夹&#xff0c;看…

Python-VBA函数之旅-issubclass函数

目录 一、issubclass函数的常见应用场景&#xff1a; 二、issubclass函数使用注意事项&#xff1a; 三、如何用好issubclass函数&#xff1f; 1、issubclass函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff…

spark3.0.0单机模式安装

注&#xff1a;此安装教程基于hadoop3集群版本 下载安装包 下载spark3.0.0版本&#xff0c;hadoop和spark版本要对应&#xff0c;否则会不兼容 用xftp上传Linux虚拟机&#xff0c;上传目录/bigdata&#xff08;可修改&#xff09; 解压 tar -zxvf /bigdata/spark-3.0.0-bin-h…

rust是否可以用于8051单片机开发工作?

目前&#xff0c;Rust 在嵌入式领域的发展主要集中在一些常见的架构上&#xff0c;如ARM Cortex-M&#xff08;包括STM32系列&#xff09;、RISC-V等。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c…

java的各种锁

我们先来看看有什么锁 一、java锁 1、乐观锁 乐观锁 是一种乐观思想 &#xff0c;假定当前环境是读多写少&#xff0c;遇到并发写的概率比较低&#xff0c;读数 据时认为别的线程不会正在进行修改&#xff08;所以没有上锁&#xff09;。写数据时&#xff0c;判断当前 与期望…

【3GPP】【核心网】【5G】5G核心网协议解析(四)(超详细)

1. 欢迎大家订阅和关注&#xff0c;精讲3GPP通信协议&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 目录 1. NGAP 按流程功能分类 1.1 接口管理过程 1.1.1 NG Setup 1.2.1 NAS消息传输过程 Transport of NAS Messa…

.NET 基于Socket中转WebSocket

前言 针对IOS App Proxy Server无法直连WebSocket&#xff0c;建立 Socket中转端。 WebSocket 端&#xff1a; WebSocket 端用于实现实时通信功能。 WebSocket 端通过 WebSocket 协议与中转端通信&#xff0c;中转端可以通过 WebSocket 或其他传输协议与 WebSocket 端建立连…

【工具】录屏软件Captura安装使用及ffmpeg下载配置

开启技术视频创作&#xff0c;录屏软件林林总总&#xff0c;适合的、习惯的最好。 录屏软件Captura的使用及ffmpeg下载配置 1.Captura下载、安装2.FFmpeg下载、配置3.Captura屏幕录制试用、录制视频效果 1.Captura下载、安装 Captura主要是一个免费开源的录屏软件&#xff0c…

2024年新算法-鹦鹉优化器(PO)优化BP神经网络回归预测

2024年新算法-鹦鹉优化器(PO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_PO, main_BPvsBP_PO&#x…

洛谷 P1021 邮票面值设计

原题链接&#xff1a;[NOIP1999 提高组] 邮票面值设计 - 洛谷 目录 题目描述 解题思路&#xff1a; 代码实现&#xff1a; 题后总结&#xff1a; 题目描述 给定一个信封&#xff0c;最多只允许粘贴 N 张邮票&#xff0c;计算在给定 K&#xff08;NK≤15&#xff09;种邮票…

javaWeb项目-邮票鉴赏系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java技术 Java 程…

spring boot3单模块项目工程搭建-下(个人开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 上文衔接 常用依赖介绍以及整合 web组件 测试组件 样板代码生成 数据库连接器 常用工具包 面向切面编…

浅涉ROS世界中的坐标系及其他

声明&#xff1a;文中图片素材均采用了其他博主文章&#xff08;文末参考来源&#xff09;&#xff0c;如有侵权或不妥&#xff08;确有不妥和不安&#xff0c;奈何苦于佳图难觅&#xff09;&#xff0c;还望告知&#xff0c;立即删除&#xff01; 坐标系统 ROS中的…

【Stable Diffusion系列】(一):AI绘画本地部署教程

目录 一、总览 二、本地部署 1、安装cuda 2、安装python 3、安装git 4、方法一 1&#xff09;获取安装包 2&#xff09;update 3&#xff09;run 5、方法二 1&#xff09;git clone 2&#xff09;双击webui-user.bat 3&#xff09;更新 6、设置启动参数 7、…
最新文章