侧边栏壁纸
博主头像
爱探索

行动起来,活在当下

  • 累计撰写 43 篇文章
  • 累计创建 12 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

android-视图动画

jelly
2024-07-30 / 0 评论 / 0 点赞 / 36 阅读 / 0 字

视图动画

概述

android的视图动画由5个类型组成

  • alpha:渐变透明动画
  • scale:渐变尺寸伸缩动画
  • translate:移动动画
  • rotate:旋转动画
  • set:动画集

XML实现

xml动画文件需要存放在res/drawable或res/anim下 访问时使用R.drawable 或 R.anim

scale 标签

作用:渐变尺寸伸缩动画效果

  • android:fromXScale:动画开始时X轴方向控件大小,取值三种取值类型:数字、百分比、百分比+”p”;
  • android:formtoXScale:动画开始时在X轴方向上控件的目标大小,取值类型同上
  • android:toXScale:动画结束时X轴方向控件大小,取值类型同上
  • android:toYScale:动画结束时在Y轴方向上控件的大小,取值类型同上
  • android:pivotX:缩放中心坐标的X值,取值类型有三种:数字;百分比;百分比+”p”;
  • android:pivotY**:缩放中心坐标的Y值;同上
  • android:duration:动画持续时长 单位ms
  • android:interpolator:动画插值器。是实现动画不规则运动的一种方式;(先占个位置)
  • android:fillAfter:动画结束之后是否保持动画的最终状态;true,表示保持动画的最终状态
  • android:fillBefore:动画结束之后是否保持动画开始前的状态;true,表示恢复到动画开始前的状态
  • android:repeatCount:动画重复的次数。指定动画重复播放的次数,如果你需要无限循环播放,请填写一个小于0的数值,一般写-1
  • android:repeatMode:动画重复的Mode,有reverse和restart两种
  • android:startOffset:动画播放延迟时长,就是调用start之后延迟多少时间播放动画

pivotX,pivotY

一般来书动画的开始起点默认是在左上角的左边原点,而使用pivotX,pivotY可以指定动画起始点与动画坐标的相对起始位置

1. 取值为数值时(如:50)

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50"
    android:pivotY="50"
    android:repeatMode="reverse"
    android:toXScale="0.5"
    android:toYScale="0.5">
</scale>

取值为数值时示例图

如图所示起点变为了50,50

1. 取值为百分数时(如:50%)

当取值为百分数时表示在原点基础上加上自身宽度(x),高度(y)的百分比。例如android:pivotX="50%" 表示在原点的基础上加上宽度的50%


<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatMode="reverse"
    android:toXScale="0.5"
    android:toYScale="0.5">
</scale>

取值为百分数时

1. 取值为百分数时(如:50%p)

当取值为百分数p时表示在原点基础上加上父控件宽度(x),父控件高度(y)的百分比。例如android:pivotX="50%p" 表示在原点的基础上加上父控件宽度的50%p

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%p"
    android:pivotY="50%p"
    android:repeatMode="reverse"
    android:toXScale="0.5"
    android:toYScale="0.5">
</scale>

alpha 标签

alpha 标签用于实现渐变透明效果,除了冲Animation继承而来的属性外还有以下属性

  • android:fromAlpha :动画开始时的透明度,取值范围为0.0-1.0,0.0 表示全透明,1.0表示不透明
  • android:toAlpha:动画结束时的透明度,取值范围为0.0-1.0,0.0 表示全透明,1.0表示不透明

rotate 标签

rotate 标签用于实现画面转移旋转动画效果,除了冲Animation继承而来的属性外还有以下属性:

  • android:fromeDegrees:动画开始旋转角度,正值带面顺时钟方向角度,负值代表逆时针方向角度
  • android:toDegrees:动画结束旋转角度,正值带面顺时钟方向角度,负值代表逆时针方向角度
  • android:pivotX:缩放中心坐标的X值,取值类型有三种:数字;百分比;百分比+”p”;
  • android:pivotY**:缩放中心坐标的Y值;同上

注:这里说的android:pivotX android:pivotY,他们取值依然时三种:数值,百分数,百分数p,与scale相同的数计算左边位置,但是它们的含义与scale是不一样的,它们在scale中用于指定动画的开始位置,而在rotate中便是的是动画旋转中心点坐标

translate

translate 标签用于实现画面变换位置移动动画效果,除了冲Animation继承而来的属性外还有以下属性:

  • android:fronXDelta:起始点x轴坐标,可以是数值、百分比、百分比p
  • android:fronYDelta:起始点Y轴坐标,可以是数值、百分比、百分比p
  • android:fronXDelta:终点X轴坐标
  • android:fronYDelta:终点Y轴坐标

set 标签

set 标签是一个容器类标签,用于定义动画集。前面说的4个都只能完成特定功能,而set可以将多个动画组合起来完成一个复杂动画,比如图片从小到大旋转出场等

set标签本身没有属性 ,它的属性都是从animation类继承而来的。示例:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">
    <rotate
        android:fromDegrees="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="720" />
    <scale
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>

上述代码完成了将控件从小到大,旋转出场.

注意:在set标签中设置repeateCount属性是无效的,必须对每一个动画单独设置才有作用。

视图动画的代码实现

前面说了如何用XML来给控件添加动画,使用XML很大程度生提高了代码的复用性。但是如果只是某一个控件临时使用一个动画可以使用代码来实现

视图动画标签锁对应的类

标签
scaleScaleAnimation
alphaAlphaAnimation
translateTranslateAnimation
rotateRotateAnimation
setAnimationSet

前面提到过scale,alpha,rotate,translate,set都牌神至Animation类,Animation类中方法是这些动画所共有的,Animation标签里的属性与方法的对应关系

标签属性类函数
android:durationsetDuration
android:fillAftersetFillAfter
android:fillBeforesetFillBefore
android:fillEnabledsetFillEnabled
android:repeatCountsetRepeatCount
android:repeatModesetRepeatMode
android:interpolatorsetInterpolator

ScaleAnimation

构造方法


ScaleAnimation(context: Context!, attrs: AttributeSet!) 

ScaleAnimation(fromX: Float, toX: Float, fromY: Float, toY: Float)

ScaleAnimation(fromX: Float, toX: Float, fromY: Float, toY: Float, pivotX: Float, pivotY: Float)

ScaleAnimation(fromX: Float, toX: Float, fromY: Float, toY: Float, pivotXType: Int, pivotXValue: Float,pivotYType: Int, pivotYValue: Float)

1. ScaleAnimation(context: Context!, attrs: AttributeSet!)

主要用于存本地资源xml文件中加载动画

其他三个构造方法

···
ScaleAnimation(fromX: Float, toX: Float, fromY: Float, toY: Float)

ScaleAnimation(fromX: Float, toX: Float, fromY: Float, toY: Float, pivotX: Float, pivotY: Float)

ScaleAnimation(fromX: Float, toX: Float, fromY: Float, toY: Float, pivotXType: Int, pivotXValue: Float,pivotYType: Int, pivotYValue: Float)

fromX ,fromY,同标签中pivotX,android:fromXScale pivotX,android:fromYScale相同.toX,toY同标签中pivotX,android:toXScale,pivotX,android:toYScale 相同,pivotX,pivotY与标签中的android:pivotX,android:pivotY相同
在属性标签中android:pivotX中由三种取值样式,分别是数字,百分数,百分数p,它体现在最后一个构造参数pivotXValue,pivotYValue这两个参数 ,它的取值 Animation.ABSOLUTE(数字), Animation.RELATIVE_TO_SELF(百分数), or Animation.RELATIVE_TO_PARENT(百分数+p)

AlphaAnimation,RotateAnimation,TranslateAnimation

这个三类分别对应 alpha,rotate,translate。它们基本和上面说的ScaleAnimation 一样,关键问题同样是pivotXValue,pivotYValue这两个参数的取值, Animation.ABSOLUTE(数字), Animation.RELATIVE_TO_SELF(百分数), or Animation.RELATIVE_TO_PARENT(百分数+p)

AnimationSet

构造方法

AnimationSet(context: Context!, attrs: AttributeSet!)
AnimationSet(shareInterpolator: Boolean)

shareInterpolator这个参数取值由两个 false,true.,当取值为true时AttributeSet中的插值器应用与它加载的所有动画,取值为false时,则它加载的动画使用各自的插值器

Animation

Animation 除了一些属性意外还有一些函数可以供我们使用

  1. void cancel():取消动画
  2. void reset():将控件重置到动画开始前状态
  3. setAnimationListener(Animation.AnimationListener listener):这只监听器
    Animation.AnimationListener有以下函数
    • onAnimationEnd(animation: Animation!) :当兵动画结束时回调
    • onAnimationRepeat(animation: Animation!)当动画重复时回调
    • onAnimationStart(animation: Animation!)当动画开始时回调
0

评论区