【android】自定义控件动画篇之视觉动画

Android的动画由5种类型组成:alpha,scale,translate,rotate,set

  • alpha:渐变透明度
  • scale:缩放尺寸
  • translate:画面变换位置
  • rotate:画面旋转
  • set:动画集

我们需要在res文件夹中创建anim文件夹

代码调用

 Animation animation = AnimationUtils.loadAnimation(this, R.anim.test);
 textView.startAnimation(animation);

一.文件调用

1.scale(缩放)

  • android:fromXScale:动画开始时,控件在X轴的缩放比例
  • android:toXScale:动画结束时,控件在X轴的缩放比例
  • android:fromYScale:动画开始时,控件在Y轴的缩放比例
  • android:toYScale:动画结束时,控件在Y轴的缩放比例
  • android:pivotX:缩放点X轴坐标
  • android:pivotY:缩放点Y轴坐标
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1.0"
    android:toXScale="0.4"
    android:fromYScale="1.2"
    android:toYScale="0.6"
    android:duration="700"
    android:pivotX="50"
    android:pivotY="50"
    >
</scale>

android:duration是动画时间
android:pivotX和android:pivotY都有三种取值方式,以50为例。分别有50,50%,50%p

android:pivotX="50"
android:pivotY="50"

以控件的左上角为坐标原点,向右移动50px,向下移动50px。

android:pivotX="50%"
android:pivotY="50%"

以控件的左上角为坐标原点,在原点坐标的基础上加上宽度的50%。

android:pivotX="50%p"
android:pivotY="50%p"

当取值在百分数后加上一个字母p时,表示在原点坐标的基础上加上宽度的100%。

2.alpha(透明)

  • android:fromAlpha:动画开始时的透明度,取值0.0-1.0
  • android:toAlpha:动画结束时的透明度,取值0.0-1.0
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="700"
    >
</alpha>

3.rotate(旋转)

  • android:fromDegrees:开始时的角度
  • android:toDegrees:结束时的角度
  • android:pivotX:旋转中心点X轴坐标
  • android:pivotY:旋转中心点Y轴坐标
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="-650"
    android:pivotY="50"
    android:pivotX="50"
    >
</rotate>

4.translate(平移)

  • android:fromXDelta:起始点X轴,同样有三种格式
  • android:fromYDelta:起始点Y轴
  • android:toXDelta:终点X轴
  • android:toYDelta:终点Y轴
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:fromYDelta="-8"
    android:toXDelta="0"
    android:toYDelta="-80">
</translate>

5.set(集合)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="700">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="50"
        android:pivotY="50"
        android:toDegrees="-650" />
    <scale
        android:duration="700"
        android:fromXScale="1.0"
        android:fromYScale="1.2"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="0.4"
        android:toYScale="0.6" />
    <translate
        android:fromXDelta="0"
        android:fromYDelta="-8"
        android:toXDelta="0"
        android:toYDelta="-80" />
</set>

6.Animation属性

  • android:duration:一次动画的持续时间,以毫秒为单位
  • android:fillAfter:设置为true,动画结束时,保持状态
  • android:fillBefore:设置为true,动画结束时,恢复原来状态
  • android:fillEnabled:与android:fillBefore效果相同
  • android:repeatCount:重复动画的次数,当值为infinite时,表示无限
  • android:repeatMode:有两个值:reverse和restart。reverse表示倒放,restart表示回放。

二.代码调用

标签
alphaAlphaAnimation
scaleScaleAnimation
translateTranslateAnimation
rotateRotateAnimation
setAnimationSet
标签属性方法
android:durationvoid setDuration(long durationMillis)
android:fillAftervoid setFillAfter(boolean fillAfter)
android:fillBeforevoid setFillBefore(boolean fillBefore)
android:fillEnabledvoid setFillEnabled(boolean fillEnabled)
android:repeatCountvoid setRepeatCount(int repeatCount)
android:repeatModevoid setRepeatMode(int repeatMode)

对应android:pivotX和 android:pivotY也有相应方法。

xml代码
50Animation.ABSOLUTE
50%Animation.RELATIVE_TO_SELF
50%pAnimation.RELATIVE_TO_PARENT

Animation除了一些属性外,还有一些函数可以调用

取消动画

void cancel()

重置动画

void reset()

动画监听

animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

三.插值器

当我们定义一个动画时,我们可以通过插值器改变动画的速度。

XML
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator@android:anim/accelerate_interpolator
AnticipateInterpolator@android:anim/anticipate_interpolator
AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator
BounceInterpolator@android:anim/bounce_interpolator
CycleInterpolator@android:anim/cycle_interpolator
DecelerateInterpolator@android:anim/decelerate_interpolator
LinearInterpolator@android:anim/linear_interpolator
OvershootInterpolator@android:anim/overshoot_interpolator
意思
AccelerateDecelerateInterpolator加速减速插值器 ,在动画中间加速
AccelerateInterpolator加速插值器,在动画开始后加速
AnticipateInterpolator初始偏移插值器,动画开始时向前偏移一段距离,然后应用动画
AnticipateOvershootInterpolator是 AnticipateInterpolator与OvershootInterpolator 的结合
BounceInterpolator弹跳插值器,模拟控件自由落地后回弹的效果
CycleInterpolator循环插值器,动画想你换特定次数,速率沿正弦曲线改变
DecelerateInterpolator减速插值器,在动画开始后减速
LinearInterpolator线性插值器,匀速加速
OvershootInterpolator结束偏移插值器,在动画结束时,沿动画方向继续运动一段时间,在结束动画

调用的方法有两种
XML调用

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="700"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator "
    >
</alpha>

代码调用

 animation.setInterpolator(new AccelerateDecelerateInterpolator());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值