android 创建文件夹_Android 动画小记

精简介绍Android中的动画,主要介绍用法。

动画种类

包括了:补间动画、逐帧动画、属性动画,前两者统称为视图动画。

补间动画

包括了平移、旋转、缩放和透明度四种,每种动画支持xml和代码设置。另外还有一种组合动画,就是将四种基础动画进行任意组合。

PS:注意补间动画后其实View的事件响应区域并没有发生改变,也就是如果使用平移动画,平移后最终视图停下的位置,这时候并不响应点击,类似的情况还包括了:放大或缩小的View,透明度为0的View,其实可点击位置和动画前一致。

特殊应用场景:

Activity切换,使用overridePendingTransition方法;

Fragment切换,使用FragmentTransactionsetCustomAnimations方法。

动画属性值

将所有的动画xml放在资源文件夹下的anim文件夹下。

平移、旋转、缩放、透明度和组合动画对应的标签分别为translate、rotate、scale、alpha和set。

公共属性含义

android:duration 时长

ndroid:startOffset 延迟开始时间,单位ms

android:fillBefore 完播视图是否会停留在初始位置,默认为true

android:fillAfter 完播视图是否会停留在结束位置,优先于fillBefore值,默认为false

android:repeatMode 重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart

android:repeatCount 重放次数,-1为无限重复

android:interpolator 动画插值器,@android:anim可以选择Android提供的

属性值的距离表示方式:固定数字、百分比、父布局百分比。

为数字时(如50),基于View的左上角偏移50px的点,代码中是Animation.ABSOLUTE;

为百分比时(如50%),基于View的左上角偏移自身宽或高50%,代码中是Animation.RELATIVETOSELF;

为百分比p时(如50%p),基于View的左上角偏移父布局宽或高50%,代码中是Animation.RELATIVETOPARENT。

平移动画

android:fromXDelta 水平方向起始值

android:toXDelta 水平方向结束值

android:fromYDelta 垂直方向起始值

android:toYDelta 垂直方向结束值

旋转动画

android:fromDegrees 开始角度

android:toDegrees 结束角度

android:pivotX 旋转点x坐标

android:pivotY 旋转点y坐标

缩放动画

android:fromXScale X方向开始缩放倍数

android:toXScale X方向结束缩放倍数

android:fromYScale Y方向开始缩放倍数

android:toYScale Y方向结束缩放倍数

android:pivotX 缩放点x坐标

android:pivotY 缩放点y坐标

透明度

android:fromAlpha 开始透明度

android:toAlpha 结束透明度

代码设置动画

加载动画资源文件

val animation = AnimationUtils.loadAnimation(this, R.anim.test_animation)

动画开始

btn.startAnimation(animation)

动画结束

btn.clearAnimation()

动画对象

TranslateAnimationRotateAnimationScaleAnimationAlphaAnimation、AnimationSet

动画监听器,调用Animation对象的setAnimationListener方法即可,其中Listener可以使用AnimatorListenerAdapter,这样不需要重写所有的接口方法。

逐帧动画

用一组图片,然后控制每张图片的停留时间,来形成一个动画。

同样在anim文件夹下创建动画文件,然后使用animation-list为根标签。

android:oneshot 设置是否只播放一次,默认为false

设置每帧动画

涉及对象AnimationDrawable,直接获取view的drawable对象,然后强转为AnimationDrawable,其中start动画开始,stop动画结束。

不过这种动画方式容易引起OOM,因为需要加载大量的图片资源。

属性动画

解决视图动画的痛点:视图的属性并不改变,容易给用户造成错觉;动画形式单一。

核心类:ValueAnimator和ObjectAnimator。

使用ValueAnimator,其本质并不修改View的相关属性,只是提供一个进度值。

创建,都可以传多个参数

ValueAnimator.ofInt(int value)

ValueAnimator.ofFloat(float values)

ValueAnimator.ofObject(int values)

动画设置方法

setDuration:动画时长

setStartDelay:开始延时时长

setRepeatCount:动画重复次数

setRepeatMode:动画重复模式

addUpdateListener:核心方法,在接口中通过animation.getAnimatedValue()获取当前值,然后对View中的某些属性进行设置。

常用的属性:width、height、alpha、x、y、scaleX、scaleY等,在设置完成后调用view.requestLayout()方法。

也可以通过xml设置,在res文件夹中的animator文件夹下。

其中属性包含了视图动画中所有的基本属性,特殊属性包括了:

根标签:animator

android:valueFrom 初始值

android:valueTo 结束值

android:valueType 变化值类型,可选floatType & intType

加载xml文件,直接将对象强转为ValueAnimator

AnimatorInflater.loadAnimator(this, R.animator.test_animator)

ObjectAnimator,对ValueAnimator进行封装,直接作用于View上,更改其中的属性值。

ObjectAnimator.ofFloat(Object object, String property, float ....values)

object,一般传入View,property传入view的属性。

xml形式,使用objectAnimator根标签,特殊属性:

android:valueFrom:初始值

android:valueTo:结束值

android:valueType 变化值类型 :floatType & intType

android:propertyName 对象变化的属性名称

常用属性:alpha、rotation、translationX、scaleX、translationY、scaleY

注意,如果想要对象对话生效,需要满足两个条件:提供属性set方法和对属性的改变必须通过某种方法反映出来。

动画修改View的宽高

使用ValueAnimator,动态修改LayoutParam中的width和heigh;

给View进行包装一下

ObjectAnimator.ofInt(wrapper, "width", 500)

11ac26fd020c92dffd41587f9377f4c1.png

组合动画:AnimatorSet

ObjectAnimator简写

view.animate().scaleX(1.0f).scaleY(1.0f).setDuration(200).start()

欢迎关注微信公众号:SimFG,让我们一起学习一起进步

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值