Android动画案例(三)属性动画

Android属性动画的一些实例 主要参照hyman大神的博客写的一些例子,包含各种动画,在项目中也是可以用上的,但当然,还是用第三方的框架好点。 立即下载

前方高能!!!有大量理论性的知识

Android系统在一开始的时候就提供了两种实现动画的方式,逐帧动画和补间动画

逐帧动画效果非常简单,就是让一张张单独的图片连续起来播放,类似于动画片的工作原理

补间动画就是则是可以对View进行一系列的动画操作,包括淡入淡出,缩放,平移,旋转四种

然而从Android 3.0 版本开始系统提供了一种全新的动画模式—属性动画
它的功能非常强大,弥补了之前补间动画的一些缺陷,(因为补间动画的可扩展性不强),几乎是可以完全替代补间动画了

那么补间动画是有哪些不能做,但是属性动画可以做到的呢?

1.补间动画只能操控View,属性动画可以对非View进行操作
比如说我们在自定义View的onDraw()方法中画的那个东西,如果加了一个动画给View,那么是操作整个View的而不是这个View中的Point
2.属性动画可以改变View的属性,补间动画仅仅改变的显示效果
比如用补间动画让一个Button向右平移,然后去点击平移后的Button,这个时候Button是不会触发点击事件的,因为Button的属性并没有真正的被改变
ObjectAnimator(最常用的类)

下面是我实现的工程截图
这里写图片描述
这里有动画的四大金刚—透明度,缩放,平移,旋转,这里会用xml和java代码两种形式去实现动画

使用xml文件去定义动画就要创建xml文件:
在drawable目录下创建 animator文件夹,我们所有的xml文件都会放在这个文件夹下面

其实套路都是一样的,那就以透明的为例将两种定义动画的方式都写上

透明度

xml定义动画

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:valueFrom="1"
    android:valueTo="0"
    android:valueType="floatType"
    android:propertyName="alpha"
    android:duration="2000"
    android:repeatCount="1"
    android:repeatMode="reverse"
    >

</objectAnimator>

valueFrom/valueTo:从哪个值到哪个值
valueType:值的类型
propertyName:动画名称
repeatCount:重复次数
repeatMode:重复的模式

这里要声明,属性动画和补间动画最后的效果是不一样的,如果使用补间动画定义,动画结束后View是会再返回到原来状态的,但是属性动画,如果不设置恢复到原来状态,View是会待在改变之后的状态的

为操控对象加载动画

 Animator animator = AnimatorInflater.loadAnimator(this, R.animator.alpha_animator);
        //给那个对象添加动画效果
        animator.setTarget(alpha_iv);
        animator.start();

java定义动画


 //实例化对象(添加动画的对象,动画名称,动画过程(最后三个参数))
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(alpha_iv, "alpha", 1.0f, 0f, 1.0f);
        //设置持续时间
        objectAnimator.setDuration(3000);
        objectAnimator.start();

缩放

//缩放
        ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(scaleX_iv, "scaleX", 1.0f, 3.0f, 1.0f);
        objectAnimator1.setDuration(3000);
        objectAnimator1.start();
        //缩放
        ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(scaleY_iv, "scaleY", 1.0f, 3.0f, 1.0f);
        objectAnimator2.setDuration(3000);
        objectAnimator2.start();

平移

//平移
        float currentX = translationX_iv.getTranslationX();//得到当前控件的X轴坐标
        ObjectAnimator objectAnimator5 = ObjectAnimator.ofFloat(translationX_iv, "translationX",
                currentX, -200f, currentX);
        objectAnimator5.setDuration(2000);
        objectAnimator5.start();
        float currentY = translationY_iv.getTranslationX();//得到当前控件的X轴坐标
        ObjectAnimator objectAnimator6 = ObjectAnimator.ofFloat(translationY_iv, "translationY",
                currentY, -200f, currentX);
        objectAnimator6.setDuration(2000);
        objectAnimator6.start();

旋转

ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(rotation_iv, "rotation", 0f, 360f);
        objectAnimator1.setDuration(2000);
        objectAnimator1.start();
        //效果为X轴为旋转轴,上下翻转
        ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(rotationX_iv, "rotationX", 0f, 360f);
        objectAnimator2.setDuration(2000);
        objectAnimator2.start();
        //效果为y轴为旋转轴,上下翻转
        ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(rotationY_iv, "rotationY", 0f, 360f);
        objectAnimator3.setDuration(2000);
        objectAnimator3.start();

有木有发现套路都是一样的呢,对!就是一样的
1.实例化ObjectAnimator 类的操作对象
ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(添加动画的对象,动画名称,动画过程);
动画过程这里可以是多个参数
2.设置可持续时间
3.start();方法开始动画

很多人会发现Obj的构造方法是非常强大的,因为它的第二个参数是一个字符串,这个字符串可以随便定义,你可以定义一个name,也可以定义一个age(几岁到几岁),alpha本来不是textView的一个属性,但是即使是随意定义也是要有根据的;虽然一个View没有alpha的属性 ,但是一个View有get/setAlpha();的方法的,这个动画的子类就是调用set/get的方法更改属性的,如果你想要更改某种属性,你的第一个参数中的对象要存在这个属性的get/set方法,所以View中也是存在 getRotation();setTranslationX()等这些方法的,可以去View的源码中去查找一下

组合

组合这里我个人认为还是用java代码去定义比较简单,并且对Xml的理解我并没有掌握的很透彻,所以有些下次和技术上的壁垒,希望看我博客的大神们可以谅解

java文件定义动画

//平移
        float currentX = translationX_iv.getTranslationX();//得到当前控件的X轴坐标
        ObjectAnimator tran = ObjectAnimator.ofFloat(set_java_iv, "translationX",
                currentX, -200f, currentX);
        //旋转
        ObjectAnimator rotate=ObjectAnimator.ofFloat(set_java_iv,"rotation",0f,360f);
        //透明度
        ObjectAnimator alpha=ObjectAnimator.ofFloat(set_java_iv,"alpha",1f,0f,1f);
        //缩放
        ObjectAnimator scale = ObjectAnimator.ofFloat(set_java_iv, "scaleX", 1.0f, 3.0f, 1.0f);
        //组合动画的类
        AnimatorSet animatorSet=new AnimatorSet();
        animatorSet.play(rotate).with(scale).with(alpha).after(tran);
        animatorSet.setDuration(5000);
        animatorSet.start();

前面都是对动画的定义,后面是将动画组合起来

after(Animator anim): 将现有动画插入到传入的动画之后执行
after(long delay):将现有动画延迟指定毫秒后执行
before(Animator anim):将现有动画插入到传入的动画之前执行
with(Animator anim):将现有动画和传入的动画同时执行

所以之后的动画执行顺序为:先向左平移,再旋转,缩放,透明度同时执行

xml定义动画

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <!--从左侧平移进来的动画-->
    <objectAnimator
        android:duration="2000"
        android:propertyName="translationX"
        android:valueFrom="250"
        android:valueTo="0"
        android:valueType="floatType" />
    <!--动画的嵌套:同时进行旋转和透明度的变化-->
    <set android:ordering="together">
        <objectAnimator
            android:duration="3000"
            android:propertyName="rotation"
            android:valueFrom="0"
            android:valueTo="360"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="3000"
            android:propertyName="alpha"
            android:valueFrom="1"
            android:valueTo="0"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="3000"
            android:propertyName="alpha"
            android:valueFrom="0"
            android:valueTo="1"
            android:valueType="floatType" />

    </set>
</set>

首先是不同时播放动画的嵌套
其次是同时播放的动画放到Set中
ordering:together动画同时执行 sequentially:分先后顺序的执行

将动画设置到控件上

Animator animator=AnimatorInflater.loadAnimator(this,R.animator.set_animator);
        animator.setTarget(set_xml_iv);
        animator.start();

动画的监听事件

以透明动画为例

animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                Log.d("TAG", "onAnimationStart");
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Log.d("TAG", "onAnimationEnd");

            }

            @Override
            public void onAnimationCancel(Animator animation) {
                Log.d("TAG", "onAnimationCancel");

            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                Log.d("TAG", "onAnimationRepeat");

            }
        });

这里写图片描述

ViewPropertyAnimator

它用法也是非常的简单,和之前所学的属性动画有所不同,它是出现在3.1系统中,它被称作是属性系列的收尾部分
大家都知道属性动画已经不仅仅可以是现在View中进行设置(但是大多数应用场景都是View)Android开发团队也意识到了这一点,所以专门开发了一个专门操作于View的属性动画

下面是实现的效果

这里写图片描述

这里有三个动画效果–平移 旋转 透明度

//这个默认的是一个加速差值器
        textView.animate().alpha(0f).setDuration(3000);
        textView.animate().x(200f).y(200f).setDuration(3000);
     textView.animate().rotation(360).setDuration(3000).setInterpolator(new LinearInterpolator());

textView是添加动画的控件,直接调用控件对象的animate()方法在 . 属性值就可以进行动画的设置
是不是灰常简单呢

而下一篇就是一个经典案例购物车动画案例
敬请期待~

Android动画例子(AnimationExample) Android动画例子(AnimationExample),写了四种效果 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 文章:http://www.cnblogs.com/markdev/articles/2658830.html 立即下载

相关推荐

Android实例(各种动画小例子)

渐变透明度动画效果、渐变尺寸伸缩动画效果、画面转换位置移动动画效果、画面转移旋转动画效果

android属性动画示例

//平移 @OnClick(R.id.btn_translation) public void translate() { ObjectAnimator.ofFloat(iv_pic, "translationX", 50).setDuration(1000).start(); } //旋转 @OnClick(R.id.btn_rotate)

Sloven 867

Android开发之图形图像与动画(三)Animation效果的XML实现

使用XML来定义Tween Animation 动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使 插值元素或者是把上面的元素都放入元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以使同时的。例如,你让文本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置一些特殊的参数(开始和结束的大小尺寸的

AIDL入门学习二

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!jpg" />

egrhef的博客 1078

PLS-SEM(偏最小二乘路径建模)模型拟合优度指标

PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值)

wewil_lwin的博客 3229

小蔺的米哈游数据分析师之路——MYSQL篇

作为新人,记录自己mysql学习历程

weixin_47070228的博客 434

在安卓中使用属性动画实现基本动画效果

一、属性动画与View动画 与属性动画相对的是View动画,关于View动画的简单介绍详见: 在安卓中使用Animation类实现基础动画效果 在安卓中使用AnimationSet类同时执行多种动画效果 View动画虽然能够满足基本的动画效果,但是有一个比较致命的缺点: UI界面上的元素看起来似乎是移动了,但那只是你眼睛所看到的“假象”,如果使用View.getX()或View.getY()来查看元素的位置,会发现它一直都没有变化。 也就是说,你的眼睛看到它移动了,实际上它真正的位置根本没有变.

女儿控老徐的专栏 1068

数据驱动AI落地:从业务价值到技术实践的全链路方法论

以数据驱动为核心,围绕 AI 落地全链路展开:先建全域数据体系(拉通内外部数据、治理数据质量),再将 AI 嵌入研发、制造、营销、服务等业务链路解决痛点,搭配混合算力架构保障技术落地,辅以 “小场景试错 - 复制” 战略、跨部门团队等方法论。结合美的集团数字化转型实践,最终实现 AI 对业务降本、增效、增收的价值,为企业 AI 转型提供可复用路径。

专注数据驱动领域原创分享。拆解从数据采集、建模分析到业务价值落地的全链路实践,聊决策逻辑、技术工具与场景案例。用通俗语言讲透数据如何赋能业务,与同路人共探数据价值。 1892

Android属性动画-简单实例

Android属性动画-简单实例 1.ValueAnimator //在2000毫秒内,将值从0过渡到1的动画 ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); anim.setDuration(2000); anim.addUpdat...

陈正的博客 2126

STM32(H7)学习记录-14 XSPI连接DDR SDRAM(HyperBus)

主控芯片是STM32H7S7 ,HyperBusRAM芯片是W956D8MBYA5I。*DQS0(这个引脚是作为RWDS)使用的CubeMX版本是6.13.0。

m0_71918616的博客 1072

OpenClaw-遇到的问题-Health check failed: gateway closed (1006 abnormal closure (no close frame)): no clos

OpenClaw网关服务安装成功但运行异常,显示健康检查失败(错误代码1006)。系统提供了Web控制界面(http://127.0.0.1:18789/)和带令牌的安全访问链接。文档建议参考故障排除指南,并提供了可选应用扩展功能(包括移动端支持)。注意运行本地代理存在安全风险,建议加固系统配置。若需启用网络搜索功能,需配置Brave搜索API密钥。安装完成后会自动打开仪表盘,需保持浏览器标签页以控制OpenClaw服务。

直到世界的尽头 1万+

属性动画源码分析二

执行start()方法,判断是否设置过自动取消,如果有会取消掉之前callback,判断当前线程是否有looper,没有则抛出异常,所以如果是直接在子线程中开启动画是会崩溃的,初始化动画数据,取出所有的PropertyValueHolder,调用setupSetterAndGetter方法。安卓动画有很多种,包括帧动画、补间动画、属性动画、过渡动画等,其中属性动画是平时开发中用的最多的一种动画,本文会首先分析下线上动画卡顿的例子,然后带着问题看下属性动画的源码。使用XML编写动画,我们需要在。

english2888的博客 240

RK3399驱动开发 | 19 - 阿美林7寸mipi屏幕调试(基于linux4.4.194内核)

NULL

Mculover666的博客(嵌入式) 2661

Android 安卓动画 属性动画 - 旋转动画

Toast.makeText(this, “我是属性动画”, Toast.LENGTH_SHORT).show();将图片,从初始0度,顺时针旋转360度,再逆时针旋转360度到0度。属性动画用到的是:ObjectAnimator。android:text=“点击演示动画”android:text=“《魁拔》”将图片,从初始值0度,顺时针转360度。将图片旋转360度,只有一次效果。第一个参数,要实现动画的控件id。

2401_89173761的博客 1781

【Android面试八股文】Android Application为什么是单例?

这道题相对简单,就是考察大家是否了解application的创建流程。的实例,它用来存储和处理整个全局变量的一些事情,它同时还是一个。为空的时候,才会创建,从而保证了它是一个单例对象。一样有自己的生命周期,但是它并没有那么复杂,因为。对象的创建过程,找出它为什么是单例的原因。全局进行一些配置,比如配置插件。的时候才会创建,所以说可以在。凭什么是单例,我们查看下。启动的时候都会创建一个。是怎么一步步创建的。是一个单例,即每一个。

字节卷动 531

从 SAP ABAP 到 S/4HANA,SAML 2.0 单点登录到底是怎么跑起来的

在很多 SAP 项目里,SSO 不是一个锦上添花的功能,而是系统能不能顺利上线的基本门槛。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1050

Android 安卓动画 属性动画 - 缩放动画

Toast.makeText(this, “我是属性动画”, Toast.LENGTH_SHORT).show();(img-fNpjj5Up-1712680859304)]属性动画用到的是:ObjectAnimator。android:text=“点击演示动画”android:text=“《魁拔》”沿着X轴放大两倍,效果只有一次。沿着X轴放大两倍效果。

2401_83641314的博客 1215

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android 安卓动画 属性动画 - 组合动画

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2401_84149423的博客 1044

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android三大动画介绍及使用

前言: 动画在安卓开发中的使用非常普遍,基本上任何带有动效的转换都是基于动画实现的。那么接下来我们就来了解一下安卓中的几大动画。 动画的分类: 安卓中把动画分为三大类:帧动画、补间动画、属性动画。而严格意义上来说这三种动画其实就是Android3.0之前的传统动画和3.0之后的属性动画,传统动画又分为帧动画和补间动画。 1.帧动画: 帧动画要说是三种动画中比较简单的一种了,它是基于一连串...

Dreamer__YY的博客 4056

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

安卓属性动画总结

属性动画简要介绍 安卓属性动画分为四种: 位置变化:TranslateAnimation 缩放: ScaleAnimation 旋转: RotateAnimation 渐变: AlphaAnimation 当然还可以将上面四种动画进行各种组合,可以采用串联或者并联实现多种效果. 动画实例 1. 位置变化 效果图: 代码: private fun move(srcView: ...

蓝不蓝编程 1212

Android 安卓动画 属性动画 - 移动动画

对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。!文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!.png?[外链图片转存中…(img-ykLmrIKY-1711547583894)]

2401_83915900的博客 895

Android 安卓动画 属性动画 - 组合动画(1)

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

2401_84003630的博客 977
上一篇: Android动画案例(二)补间动画
下一篇: Android动画案例(四)购物车动画案例
许菠萝
博客等级 码龄10年 263粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值