安卓属性动画

news2024/11/13 7:52:54


一.三种安卓动画

  1. Tween Animation(补间动画、视图动画):通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生的动画效果,即是一种渐变动画。

  2. Frame Animation(帧动画):顺序播放事先做好的图像,是一种画面转换动画。

  3. Property Animation:属性动画,通过动态地改变对象的属性从而达到动画效果,属性动画为API 11新特性。

二.属性动画的优点

1.属性动画是通过阈值器来调整的,可以高效完成简单的动画效果,从而节约内存空间。

2.对比帧动画,是通过图片的切换来实现动画效果的,可以实现复杂的动画效果但是非常耗内存。

3.属性动画多用于控件的状态变化,而帧动画用于展现复杂且连续的图片,比如短视频等。

三.属性动画实例

1.效果展示

在这里插入图片描述

2.关键代码

.xml布局文件,采用线性布局,四个button和一个image


MainActive代码

(1)moveView方法,修改view的位置,后续可调用该方法设置起始坐标及宽高

private void moveView(View view, int rawX, int rawY) {
int left = rawX - view.getWidth() / 2;
int top = rawY - view.getHeight();
int weight = left + view.getWidth();
int height = top + view.getHeight();
view.layout(left, top, weight, height);
}
(2)动画的实现

按钮1,直线移动代码实现

@Override
public void onClick(View view) {
//获取总布局的宽和高
int width = ly_root.getWidth();
int height = ly_root.getHeight();
ValueAnimator va = ValueAnimator.ofInt(height, 0, height / 4, height / 2, height / 4 * 3, height);
va.setDuration(3000l);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int x = width / 2;
int y = (int) va.getAnimatedValue();
moveView(img_babi, x, y);
}
});
va.setInterpolator(new LinearInterpolator());
va.start();
}
按钮二,缩放

@Override
public void onClick(View view) {
final float scale = 0.5f;
AnimatorSet scaleSet = new AnimatorSet();
ValueAnimator vaSmall = ValueAnimator.ofFloat(1.0f, scale);
vaSmall.setDuration(500);

ValueAnimator vaLarge = ValueAnimator.ofFloat(scale, 1.0f);
vaLarge.setDuration(500);
vaSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float scale = (float) valueAnimator.getAnimatedValue();
        img_babi.setScaleX(scale);
        img_babi.setScaleY(scale);
    }
});
vaLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float scale = (float) valueAnimator.getAnimatedValue();
        img_babi.setScaleX(scale);
        img_babi.setScaleY(scale);
    }
});
scaleSet.play(vaLarge).after(vaSmall);
scaleSet.start();

}
按钮三,旋转

@Override
public void onClick(View view) {
int width = ly_root.getWidth();
int height = ly_root.getHeight();
final int R = width / 4;
ValueAnimator va = ValueAnimator.ofFloat(0, (float) (2.0f * Math.PI));
va.setDuration(1000);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float t = (float) valueAnimator.getAnimatedValue();
int x = (int) (R * Math.sin(t) + width / 2);
int y = (int) (R * Math.cos(t) + height / 2);
moveView(img_babi, x, y);
}
});
va.setInterpolator(new DecelerateInterpolator());
va.start();
}
按钮四,圆形旋转

@Override
public void onClick(View view) {
ValueAnimator va = ValueAnimator.ofInt(0, 360);
va.setDuration(1000l);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int rotate = (Integer) valueAnimator.getAnimatedValue();
img_babi.setRotation(rotate);
float fractionValue = valueAnimator.getAnimatedFraction();
img_babi.setAlpha(fractionValue);
}
});
va.setInterpolator(new DecelerateInterpolator());
va.start();

}
3.代码功能总结

ofFloat,ofInt方法用来创建ValueAnimator实例

set…方法可以用来设置动画持续时间等

start()方法可以开启动画

原文链接:

guoguoguoyaonuli

http://t.csdn.cn/vzwEj

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

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

相关文章

基于PLC的工业晾晒架系统

目录 前言 6 第一章 工业晾晒架的发展现状及趋势 7 1.1自动工业晾晒架的基本介绍 7 1.2自动工业晾晒架发展史和发展现状 8 第二章 自动晾晒架的智能模块 9 2.1自动晾晒架的结构框图 9 2.2自动晾晒架的机械理论 10 第三章 自动晾晒架的硬件设计 11 3.1电源设计部分 12 3.2 PLC的…

组合模式

文章目录思考组合模式1.组合模式的本质2.何时选用组合模式3.优缺点4.实现思考组合模式 组合模式实际上就是让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。 1.组合模式的本质 组合模式的本质:统一叶子对象和组合对象。 组合模式通过把叶…

No.179 念念随风上九霄

引言有人跟老梁说,你挺忙的吧,更新变少了。害,可不是嘛?时间不太够,凑不出来了。凑不出来就不凑它了,扯扯其他的吧。在大城市生活节奏是快,个人也被裹挟着运转,无处可逃。从早到晚&a…

[附源码]计算机毕业设计基于SpringBoot动漫电影网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何用 7 分钟击破 Serverless 落地难点?

当前,Serverless 覆盖的技术场景正在不断变广。Serverless 已在微服务、在线应用、事件驱动、任务处理等众多场景被验证且广泛应用 。当你想要部署一个网站时,需要自己购买服务器并花费时间去维护,造成资源浪费不说,还要耗费精力。…

【NR 物理资源】

NR中与物理资源相关的概念主要包括天线端口、资源网格、资源单元、资源块RB和BWP等。 文章目录天线端口(Antenna Ports)资源网格Resource grid和资源单元RE资源块Resource Block部分带宽BWP天线端口(Antenna Ports) 天线端口定义 …

qmake source code 解读

qmake的主要功能执行入口在main.cpp中的runQMake(int argc, char **argv)中。其主要框架如下: runQMake(int argc, char **argv){QMakeVfs vfs; //初始化qmake的文件系统。virtual file system。vfs会为每个文件赋予一个id,并提供根据id进行操作的函数。Option::vfs &v…

交通流的微观模型(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

用好单例设计模式,代码性能提升300%

目录 一次请求执行流程java代码是如何运行的?堆内存满了后怎么办?用单例模式如何优化系统性能? 大家好,今天给大家分享一个写代码的设计模式,就是我们最最耳熟能详的单例设计模式。 可能很多人都听说过这个单例设计模…

基于Dijkstra和A*算法的机器人路径规划(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 网络分析是GIS中非常重要的空间分析功能之一, 最短路径分析又是网络分析的核心算法, 该算法的效率决定了网络分析的功能和效率…

【CSDN】官方Markdown示例教程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Docker学习系列3:常用命令之容器命令

本文是Docker学习系列教程中的第三篇。前几篇教程如下: 「图文教程」Windows11下安装Docker Desktop 「填坑」在windows系统下安装Docker Desktop后迁移镜像位置 Docker学习系列1-如何安装docker? 【Docker学习系列】Docker学习2-docker设置阿里云镜像加速器 【Doc…

简单宠物网页设计作业 静态HTML动物介绍网页作业 DW宠物网站模板下载 大学生简单野生动物网页作品代码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

ADSP-21569/ADSP-21593的开发入门(下)

开始调试 软硬件都准备好了,该插的JTAG头,2根usb线都插好了,我们就开始进入调试,首先是要搭建软件环境。 软件用的是CCES,这个软件是基于Eclipse的,基本操作跟他都一样,我们首先打开软件。 他…

阿里资深架构师钟华曰:中台战略思想与架构实战;含内部实施手册

​ 编辑 添加图片注释,不超过 140 字(可选) 最近在读一本书,叫做《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》,在写此文时本书还没有看完,因为担心如果把书全部看完后再来写这篇文…

Android轮播图控件com.github.pinguo-zhouwei:MZBannerView:v2.0.2

build.gradle 配置&#xff1a; dependencies { compile com.github.pinguo-zhouwei:MZBannerView:v2.0.2}xml布局&#xff1a; <com.zhouwei.mzbanner.MZBannerViewandroid:id"id/banner"android:layout_width"match_parent"android:layout_height&quo…

SpringBoot项目实现发布订阅模式,真的很简单

大家好&#xff0c;我是老三&#xff0c;在项目里&#xff0c;经常会有一些主线业务之外的其它业务&#xff0c;比如&#xff0c;下单之后&#xff0c;发送通知、监控埋点、记录日志…… 这些非核心业务&#xff0c;如果全部一梭子写下去&#xff0c;有两个问题&#xff0c;一…

python中的集合详解

目录 一.思考 二.集合 基本语法 集合的常用操作——修改 1.添加新元素 2.移除元素 3.从集合中随机取出元素 4.清空集合 5. 消除两个集合的差集 6.两个集合的合并 注意&#xff1a;集合的遍历 三.集合总结 一.思考 为什么使用集合&#xff1f; 我们目前接触到了列表、元…

php后端+JQuery+Ajax简单表单提交

通过ajax,如果从后端直接想前端返回数组,那前端收到的是一个‘Array’的字符串。所以,我比较习惯的是用json对象的格式。由后端通过json_encode()函数,把数组封装成对象,传递到前端;前端也以json的格式接收。这里用提交表单来举例说明。 页面显示如下: JQueryAjax.…

Kafka服务端参数配置

$KAFKA_HOME/config/server.properties文件中的配置 1、zookeeper.connect 该参数用于配置Kafka要连接的Zookeeper/集群的地址。它的值是一个字符串&#xff0c;使用逗号分隔Zookeeper的多个地址。Zookeeper的单个地址是host:port形式的&#xff0c;可以在最后添加Kafka在Zoo…