Android 视图动画 android动画效果大全
suiw9 2024-10-29 16:44 35 浏览 0 评论
一、视图动画标签
0.概述
视图动画有5种类型组成: alpha:渐变透明度 scale:渐变尺寸伸缩 translate:画面变换位置移动 rotate:画面转移旋转移动 set:定义动画集
1.scale标签
scale_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"> //动画持续时间
<scale
android:fromXScale="0.1" //初始X轴的缩放
android:fromYScale="0.1" //初始y轴的缩放
android:toXScale="1.4" //目标x轴的缩放
android:toYScale="1.4" //目标y轴的缩放
android:pivotX="150" //以控件的位置原点坐标,动画开始的起始位置x轴坐标
android:pivotY="150"/> //以控件的位置原点坐标,动画开始的起始位置y轴坐标
</set>
pivotX有三种数值:
150 直接数字,则是以控件为原点坐标的xy的坐标值(150,150),以目标控件为原点
150% 百分比的,是以控件为原点坐标的,为控件的宽度的150%的坐标,150%那就是控件宽度的150%
150%p 上面同理,但是以父控件的150%
java代码
startAnimBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//装载动画 R.anim.scale_anim 为动画位置
Animation scaleAnimation=AnimationUtils.loadAnimation(mContext,R.anim.scale_anim);
//启动动画
scaleTV.startAnimation(scaleAnimation);
}
});
效果
2.共同属性
所有动画都继承自Animation类,所以有一些共同的属性。
android:duration="3000" //动画持续时间,毫秒单位
android:fillAfter="true" //true动画结束,保持控件结束时的状态
android:fillBefore="true"//true动画结束,保持控件最初始状态
android:repeatCount="3" //动画重复次数,infinite表示无限循环
android:repeatMode="restart" //重复的类型,restart表示从头开始,reverse表示倒序回放
android:interpolator="@android:interpolator/accelerate_cubic" //插值器,控制速度等
看看回放和倒序回放 倒序回放:
android:repeatCount="3"
android:repeatMode="reverse"
回放:
android:repeatCount="3"
android:repeatMode="restart"
3.alpha标签
<alpha
android:duration="3000" //持续时间
android:fromAlpha="0.1" //初始透明度
android:toAlpha="1"/> //最大透明度 数值在0.0~1.0之间
效果:
4.rotate标签
<alpha
android:fromAlpha="0.01" //初始角度
android:toAlpha="1"/> //旋转角度 取值范围可以为负值,为逆时针,正值为顺时针
效果:
5.translate标签
<translate
android:fromXDelta="50" //以控件为原坐标,x轴加50 为起始X轴
android:fromYDelta="50" //以控件为原坐标,y轴加50 为起始y轴
android:toXDelta="400" //目标x轴
android:toYDelta="400" /> //目标y轴
效果:
7.set标签
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000"
android:fillAfter="false"
android:fillBefore="true">
<scale
android:fromXScale="0.1"
android:fromYScale="0.1"
android:pivotX="150"
android:pivotY="150"
android:toXScale="1.4"
android:toYScale="1.4" />
<alpha
android:fromAlpha="0.5"
android:toAlpha="1"/>
<rotate
android:fromDegrees="0.0"
android:toDegrees="360"/>
<translate
android:fromXDelta="50"
android:fromYDelta="50"
android:toXDelta="300"
android:toYDelta="300" />
</set>
效果:
二、视图动画代码实现
0.概述
这些标签,都对应一个类,但他们都是派生自Animation类。
scale ScaleAnimation alpha AlphaAnimation rotate RotateAnimation translate TranslateAnimation set AetAnimation
1.ScaleAnimation
四个构造方法来加载scale动画
ScaleAnimation(Context context, AttributeSet attrs)
ScaleAnimation(float fromX, float toX, float fromY, float toY)
ScaleAnimation(float fromX, float toX, float fromY, float toY,
float pivotX, float pivotY)
ScaleAnimation(float fromX, float toX, float fromY, float toY,
int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
ScaleAnimation( float fromX, //初始x轴的缩放
float toX, //目标缩放
float fromY, //初始y轴缩放
float toY, //目标y轴缩放
int pivotXType, float pivotXValue, //以原坐标为原点,x轴的起始点
int pivotYType, float pivotYValue) //以原坐标为原点,y轴的起始点
pivotXType的类型有:
RELATIVE_TO_SELF 百分比,相对自身百分比 50%
RELATIVE_TO_PARENT百分比,相对父控件百分比 50%p
ABSOLUTE具体数值 比如 50
2.AlphaAnimation
AlphaAnimation(Context context, AttributeSet attrs)
AlphaAnimation(float fromAlpha, float toAlpha)
AlphaAnimation( float fromAlpha, //初始透明度
float toAlpha) //目标透明度
3.RotateAnimation
RotateAnimation(Context context, AttributeSet attrs)
RotateAnimation(float fromDegrees, float toDegrees)
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
int pivotYType, float pivotYValue)
RotateAnimation( float fromDegrees, //初始角度
float toDegrees, //目标角度
int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
4.TranslateAnimation
TranslateAnimation(Context context, AttributeSet attrs)
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
int fromYType, float fromYValue, int toYType, float toYValue)
TranslateAnimation( int fromXType, float fromXValue, //起始x轴坐标
int toXType, float toXValue, //目标x轴坐标
int fromYType, float fromYValue, //起始y轴坐标
int toYType, float toYValue) //目标y轴坐标
5.AnimationSet
AnimationSet(Context context, AttributeSet attrs)
AnimationSet(boolean shareInterpolator) //true 共用一个插值器,false 各自定义插值器
都是继承自Animation,有这些共同属性
animationSet1.setDuration(3000); //动画时长
animationSet1.scaleCurrentDuration(4.0f); //当前动画时间
animationSet1.setFillAfter(true); //true动画结束,保持控件结束时的状态
animationSet1.setFillBefore(true); //true动画结束,保持控件最初始状态
animationSet1.setRepeatMode(Animation.RESTART); //循环模式
animationSet1.setStartOffset(1000); //在什么时间停止动画
animationSet1.setStartTime(500); //在什么时间开始动画
animationSet1.setRepeatCount(5); //循环次数
animationSet1.setFillEnabled(true); //true动画结束,保持控件结束时的状态
装载所有动画效果
ScaleAnimation scaleAnimation1 = new ScaleAnimation(
0.0f,
1.4f,
0.0f,
1.4f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
AlphaAnimation alphaAnimation1=new AlphaAnimation(0.1f,0.5f);
RotateAnimation rotateAnimation1=new RotateAnimation(0.1f,0.1f);
TranslateAnimation translateAnimation1=new TranslateAnimation(
Animation.ABSOLUTE,
50,
Animation.ABSOLUTE,
50);
AnimationSet animationSet1=new AnimationSet(true); //装载
animationSet1.addAnimation(scaleAnimation1);
animationSet1.addAnimation(alphaAnimation1);
animationSet1.addAnimation(rotateAnimation1);
animationSet1.addAnimation(translateAnimation1);
animationSet1.setDuration(3000);
animationSet1.scaleCurrentDuration(4.0f);
animationSet1.setFillAfter(true);
animationSet1.setFillBefore(true);
animationSet1.setRepeatMode(Animation.RESTART);
animationSet1.setStartOffset(1000);
animationSet1.setStartTime(500);
animationSet1.setRepeatCount(5);
animationSet1.setFillEnabled(true);
6.Animation
animationSet1.cancel(); //取消动画
animationSet1.reset(); //将控件重置到初始化状态
animationSet1.setAnimationListener(AnimationListener listener); //设置监听
监听,利用监听可以实现动画的连续效果,比如,先实现缩放,再实现位移
animationSet1.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//动画开始
}
@Override
public void onAnimationEnd(Animation animation) {
//动画结束
}
@Override
public void onAnimationRepeat(Animation animation) {
//动画结束
}
});
三、基础插值器
0.概述
控制动画变化速率的值,就叫插值器,也叫加速器。有Interpolator类来决定。
使用方法 在xml中使用: android:interpolator="@android:anim/accelerate_interpolator"
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="3000"
android:fillAfter="false"
android:fillBefore="true">
</set>
在java代码中使用; animationSet1.setInterpolator(new AccelerateInterpolator());
1.系统插值器
系统已经定义了一些常见的插值器
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 先加速,后减速 AccelerateInterpolator @android:anim/accelerate_interpolator 开始慢,后一直加速 DecelerateInterpolator @android:anim/decelerate_interpolator 开始一瞬间加到最大,后慢慢减慢 LinearInterpolator @android:anim/linear_interpolator 匀速加速器 BounceInterpolator @android:anim/bounce_interpolator 模拟自由落体回弹的效果 AnticipateInterpolator @android:anim/anticipate_interpolator 反方向效果一段时间,再执行正常动画,如,旋转。先反旋转一段距离 OvershootInterpolator @android:anim/overshoot_interpolator 动画结束之后,再执行一段时间 AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 开始时,反方向效果一段时间,结束时,超过效果时间一段时间 CycleInterpolator(1) @android:anim/cycle_interpolator 动画特定循环播放的次数,速率沿正弦曲线变化
四、动画示例
1.镜头由远及近
控件
<ImageView
android:id="@+id/img"
android:src="@drawable/ali"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
java代码
ScaleAnimation scaleAnimation=new ScaleAnimation(
0.5f,
1.2f,
0.5f,
1.2f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
scaleAnimation.setFillAfter(true);
scaleAnimation.setInterpolator(new AccelerateInterpolator());
scaleAnimation.setDuration(6000);
imgIV.startAnimation(scaleAnimation);
效果:
2.加载框效果
<ImageView
android:id="@+id/load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:src="@drawable/load" />
RotateAnimation rotateAnimation=new RotateAnimation(
0,
360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setFillAfter(true);
rotateAnimation.setRepeatCount(Animation.INFINITE); //无限循环
rotateAnimation.setInterpolator(new LinearInterpolator()); //匀速
rotateAnimation.setDuration(2000);
loadIV.startAnimation(rotateAnimation);
效果:
编程中我们会遇到多少挫折?表放弃,沙漠尽头必是绿洲。
相关推荐
- 5款Syslog集中系统日志常用工具对比推荐
-
一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
-
简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
-
NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
-
一、什么场景使用MongoDB?...
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
-
作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
-
前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...
- solidworks使用心得,纯干货!建议大家收藏
-
SolidWorks常见问题...
- 统一规约-关乎数字化的真正实现(规范统一性)
-
尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...
- Elasticsearch节点角色配置详解(Node)
-
本篇文章将介绍如下内容:节点角色简介...
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
-
作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...
- 比任何人都光彩照人的假期!水润、紧致的肌肤护理程序
-
图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...
- Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型
-
中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...
- 柔性——面向大规模定制生产的数字化实现的基本特征
-
大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...
- 创建PLC内部标准——企业前进的道路
-
作者:FrankBurger...
- 标准化编程之 ----------- 西门子LPMLV30测试总结
-
PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
-
- 5款Syslog集中系统日志常用工具对比推荐
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- solidworks使用心得,纯干货!建议大家收藏
- 统一规约-关乎数字化的真正实现(规范统一性)
- Elasticsearch节点角色配置详解(Node)
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)