Android开发之动画

逐帧动画

通过在连续的帧之间快速切换来创建动画效果

  • var anim = animationView.background as AnimationDrawable获取动画的Drawable资源
  • anim.start()启动动画
  • anim.stop()停止动画
private lateinit var animationView: ImageView
private var flag: Boolean = trueanimationView = findViewById(R.id.animationView)var anim = animationView.background as AnimationDrawableanimationView.setOnClickListener(View.OnClickListener {if (flag) {anim.start()//启动动画flag = false} else {anim.stop()//停止动画flag = true}})

放置图片的list

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/img" android:duration="200"/>
<item android:drawable="@drawable/img_1" android:duration="200"/>
<item android:drawable="@drawable/img_2" android:duration="200"/>
<item android:drawable="@drawable/img_3" android:duration="200"/>
<item android:drawable="@drawable/img_4" android:duration="200"/>
<item android:drawable="@drawable/img_5" android:duration="200"/>
<item android:drawable="@drawable/img_6" android:duration="200"/>
</animation-list>

补间动画

使用中间帧来平滑地改变一个属性(例如位置、大小等)

  • alpha 透明度
    • android:fromAlpha="0"开始的透明度
    • android:toAlpha="1"结束的透明度
    • android:duration="2000"透明度变化的周期

设置

  iv=findViewById(R.id.iv)iv.setOnClickListener(View.OnClickListener {//通过加载xml动画设置文件创建一个animation对象var annotationView = AnimationUtils.loadAnimation(this,R.anim.alpha)iv.startAnimation(annotationView)})
  • rotate 旋转
    • android:fromDegrees="0"开始旋转的角度
    • android:toDegrees="360"结束旋转的角度
    • android:pivotX="50%"X轴旋转位置
    • android:pivotY="50%"Y轴旋转位置
    • android:duration="3000"旋转周期

设置

  iv=findViewById(R.id.iv)iv.setOnClickListener(View.OnClickListener {//通过加载xml动画设置文件创建一个animation对象
var annotationView = AnimationUtils.loadAnimation(this,R.anim.rotate)
iv.startAnimation(annotationView)
  • scale 缩放
    • android:fromXScale="1"未开始缩放之前的X轴大小
    • android:fromYScale="1"未开始缩放之前的Y轴大小
    • android:toXScale="0.5"缩放之后的X轴大小
    • android:toYScale="0.5"缩放之后的Y轴大小
    • android:pivotX="50%"X轴缩放位置
    • android:pivotY="50%"Y轴缩放位置
    • android:duration="3000"缩放周期
      设置
  iv=findViewById(R.id.iv)iv.setOnClickListener(View.OnClickListener {//通过加载xml动画设置文件创建一个animation对象var annotationView = AnimationUtils.loadAnimation(this,R.anim.scale)iv.startAnimation(annotationView)})
  • translate 平移
    • android:fromXDelta="0"未开始平移之前的X轴大小
    • android:fromYDelta="0"未开始平移之前的Y轴大小
    • android:toXDelta="400"平移之后的X轴大小
    • android:toYDelta="400"平移之后的Y轴大小
    • android:duration="3000"旋转周期
      设置
  iv=findViewById(R.id.iv)iv.setOnClickListener(View.OnClickListener {//通过加载xml动画设置文件创建一个animation对象var annotationView = AnimationUtils.loadAnimation(this,R.anim.translate)iv.startAnimation(annotationView)})

属性动画

在给定时间段内平滑地改变一个或多个属性值的动画

ValueAnimator 使用

iv = findViewById(R.id.iv)//创建了一个新的ValueAnimator实例,并指定了动画应该从0开始到1结束var animator = ValueAnimator.ofFloat(0f, 1f)animator.setDuration(3000)//设置周期//在动画的每一次更新时调用animator.addUpdateListener(ValueAnimator.AnimatorUpdateListener {//获取当前动画的值,并将其转换为浮点数var value = it.animatedValue as FloatLog.e("MainActivity2", "onAnimationUpdate:" + value)})//启动动画animator.start()

ObjectAnimator 使用

   //创建ObjectAnimator实例,实例改变iv的ImageView的透明度。动画从完全透明(0f)开始,到完全不透明(1f)结束var objectAnimator = ObjectAnimator.ofFloat(iv, "alpha", 0f, 1f)//设置动画周期objectAnimator.duration = 3000objectAnimator.start()//动画监听器,在动画的不同阶段调用特定的方法objectAnimator.addListener(object : Animator.AnimatorListener {//动画开始时调用override fun onAnimationStart(p0: Animator) {Log.e(TAG, "动画开始")}//动画结束时调用override fun onAnimationEnd(p0: Animator) {Log.e(TAG, "动画结束")}//动画被取消时调用override fun onAnimationCancel(p0: Animator) {Log.e(TAG, "动画被取消")}//动画重复时调用override fun onAnimationRepeat(p0: Animator) {Log.e(TAG, "动画重复")}})//另一种添加监听器的方式,仅重写需要的方法objectAnimator.addListener(object : AnimatorListenerAdapter() {override fun onAnimationStart(animation: Animator, isReverse: Boolean) {super.onAnimationStart(animation, isReverse)}})

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

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

相关文章

C语言KR圣经笔记 6.8联合体 6.9位域

6.8 联合体&#xff08;union&#xff09; 联合体是一个可以&#xff08;在不同时间&#xff09;保存不同类型和大小的对象的变量&#xff0c;由编译器来跟踪大小和对齐要求。联合体提供了一种不用在程序中嵌入任何与机器相关的信息&#xff0c;而能够在单个存储区域内操作不同…

时间序列预测——GRU模型

时间序列预测——GRU模型 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元&#xff08;GRU&#xff09;模型&#xff0c;包括其理论基础…

Flutter canvas 画一条会动的波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形&#xff0c;html 的 Canvas 也画过一次类似的&#xff0c; 今天用 Flutter Canvas 试了下 感觉差不多&#xff1a; html 版本 大致效果如下&#xff1a; 思路和 html 实现的类似&#xff1a; 也就是找出点的位置&#xff0c;使用二阶…

DAY37:贪心算法738

今天写了一道题目&#xff0c;顺便看了一个很好的总结&#xff0c;这篇博客可以跳过。 Leetcode&#xff1a;738 单调递增的数字 因为最大的数字是9&#xff0c;当出现后面位数的数字比前面位数的数字小的时候&#xff0c;就把后面的数字都变成9&#xff0c;前面那个数字--。…

网安面试指南——(渗透,攻击,防御)

网安面试 目录 1.什么是 WebShell? 2.什么是网络钓鱼&#xff1f; 3.你获取网络安全知识途径有哪些&#xff1f; 4.什么是 CC 攻击&#xff1f; 5.Web 服务器被入侵后&#xff0c;怎样进行排查&#xff1f; 6.dll 文件是什么意思&#xff0c;有什么用&#xff1f;…

Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘

看下多语言js文件中&#xff0c;是否同级出现相同名称。

3D 转换

1&#xff0c;3D的特点&#xff1a; 近小远大 物体后面遮挡不可见 2&#xff0c;3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向&#xff0c;就是z轴方向 transform&#xff1a;translateX&#xff08;100px&#xff09;&#xff1a;仅仅是在x轴上移动…

mysql8.0主从搭建

一、架构说明 MySQL 主从架构是一种常见的数据库部署方案&#xff0c;用于实现数据的自动同步和冗余备份。在该架构中&#xff0c;主服务器负责处理事务的写入操作&#xff0c;从服务器则负责复制主服务器上的数据&#xff0c;并可以用于读取操作&#xff0c;以减轻主服务器的…

寒假刷题第19天

PTA甲级 1134 Vertex Cover #include<iostream> #include<vector> #include<set>using namespace std;typedef pair<int , int> PII; vector<PII>v; int n , m;bool check(set<int>&se) {for(auto i : v)if(!se.count(i.first) &…

【C/C++ 07】词频统计

一、题目 读入一篇英文短文&#xff0c;去除介词、连词、冠词、副词、代词等非关键性单词后&#xff0c;统计每个单词出现的次数&#xff0c;并将单词按出现次数的降序和单词字符的升序进行显示5个单词。 二、算法 1. 通过<fstream>库创建fstream流对象&#xff0c;并从…

uniapp【组件封装】时间戳格式化为星期

组件 components/dos-week.vue <template><text>{{week}}</text> </template> <script>export default {props: {time: String},mounted(e) {this.week this.getWeek(Number(this.time))},data() {return {week: }},methods: {// 通过时间戳计…

美区或其他外区Appstore账号AppleID注册教程,简单快速,苹果必备!

▍前言 现在越来越多的APP在国区APPstore下架&#xff0c;如果想有更好的使用体验&#xff0c;不得不去外区下载APP&#xff0c;那就需要一个外区的apple id&#xff0c;注册也很简单&#xff0c;今天大鹏通过电脑ipad给大家注册一个&#xff0c;建议大家直接使用iPhone或者iPa…

python魔法函数[全面]

1、init 用于初始化对象的属性和状态 当创建一个对象时&#xff0c;Python会自动调用该对象的__init__方法。 这个方法用于初始化对象的属性和状态&#xff0c;是对象创建过程中的一个重要环节 2、new # 通常我们不需要重写__new__方法&#xff0c;除非我们正在进行一些非常…

好书推荐丨保姆级Midjourney教程,这本写给大家看的设计书闭眼入!

文章目录 写在前面好书推荐Part.1Part.2Part.3 粉丝福利写在后面 写在前面 在AI绘画界&#xff0c;有每日经典一问&#xff1a;“你今天用Midjourney画了啥&#xff1f;”晒作品成为重头戏。 小红书上关于Midjourney出的图片点赞数惊人。 reddit上的恶搞幽默图片热度居高不下…

GSM-TRIAL-21.04.9-VMware-Workstation.OVA安装教程,GreenBone虚拟机安装教程

将GSM-TRIAL-21.04.9-VMware-Workstation.ova用VMware打开 先设置好网络和内存&#xff1a; 1、打开虚拟机&#xff0c;显示&#xff1a;你的GSM还不能完全正常工作。您想现在完成设置吗? 点击yes 2、创建用户&#xff0c;一会儿登录网页要用&#xff0c;点击yes 3、创建用户…

指向 Data Member 的指针

看一下很简单的一个例子&#xff1a; #include <stdlib.h> #include <stdio.h> #include <malloc.h>class origin { public:virtual ~origin(){} public:int x; };int main() {origin A;printf("&origin::x %p, &A.x %p\n", &origi…

OpenGL查询对象 Query Objects

查询对象和异步查询(Query Objects and Asynchronous Queries) Query Objects&#xff08;查询对象&#xff09;是OpenGL中的一种机制&#xff0c;用于获取有关一系列GL命令处理过程的信息。这些信息可以包括&#xff1a; 绘图命令处理的图元数量。写入变换反馈缓冲区的图元数…

小黄鸭聊电脑(4)硬盘分区

小黄鸭聊电脑(4)硬盘分区 夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;…

洛夫克拉夫特与文学中的超自然恐怖:前哥特时代

洛夫克拉夫特与文学中的超自然恐怖&#xff1a;前哥特时代 ![ 洛夫克拉夫特是美国恐怖、科幻与奇幻小说作家&#xff0c;尤以其怪奇小说著称&#xff0c;他在自己的一系列小说中开发出了克苏鲁神话体系。他的创作对后世恐怖小说创造影响深远&#xff0c;我们可以在许多当代文…

[leetcode] 21. 合并两个有序链表

文章目录 题目描述解题方法双指针遍历java代码 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff…