Android常用动画总结

本文详细介绍了Android中的三种动画类型:帧动画、补间动画和属性动画。包括每种动画的实现方式、XML配置示例及代码调用方法。适用于希望了解或深入掌握Android动画机制的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中常用的动画:
(1)帧动画:
例如加载的dialog,音量大小的效果等。就像放电影一样,一帧一帧的,通过不停的切换图片达到动画的效果,很简单,看代码:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/chatfrom_voice_playing_f1"
        android:duration="200" />
    <item
        android:drawable="@drawable/chatfrom_voice_playing_f2"
        android:duration="200" />
    <item
        android:drawable="@drawable/chatfrom_voice_playing_f3"
        android:duration="60" />
</animation-list>

在res\anim目录下建立动画文件voice.xml。
使用:
在布局中如下:

 <ImageButton
    android:id="@+id/animation1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@anim/voice" />

开启动画:

ImageButton btn = (ImageButton) findViewById(R.id.animation1);
AnimationDrawable animationDrawable = (AnimationDrawable) btn.getBackground();
animationDrawable.start();

(2)补件动画:
针对View的旋转,平移,缩放,透明度。记录如下:
res\anim\animation.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <scale
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:interpolator/anticipate_overshoot"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.5"
        android:toYScale="1.5" />
    <scale
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="@android:integer/config_shortAnimTime"
        android:toXScale="0.6"
        android:toYScale="0.6" />
    <alpha
        android:duration="@android:integer/config_shortAnimTime"
        android:fromAlpha="0"
        android:interpolator="@android:interpolator/anticipate_overshoot"
        android:toAlpha="1" />
    <translate
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:interpolator="@android:interpolator/anticipate_overshoot"
        android:toXDelta="80%p"
        android:toYDelta="-100%" />
</set>

set:集合的意思,容纳多个动画,是他们同时执行。
duration:动画时长,fromXXX,toXXX就是某个属性的起始值和要达到的值。
比如translate中的android:fromXDelta=”0”,android:toXDelta=”80%p”就是水平方向移动,fromXDelta=”0”:起始值为0,就是自身所在的位置,toXDelta=”80%p”,该View所在父view的宽的80%,p为parent,如果没有p就是相对与自身。View将水平方向移动父View宽度的80%。
对scale,rotate注意需要制定变换的中心点。否则默认(0,0)点,即View的左上角。
android:pivotX=”50%”
android:pivotY=”50%”
意思是中心点的位置,50%就是View的中心。
interpolator:差值器。就是一个函数,不如sin,cos。等等。
android:startOffset:动画开始的延时。
android:fillAfter=”true”:动画结束后,view停留在动画的最后一帧。默认是停留在第一帧。
再来看一个:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="600"
    android:interpolator="@android:anim/linear_interpolator"
    android:fromDegrees="0.0"
    android:toDegrees="359"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    />

看使用:

ImageView img2 = (ImageView) findViewById(R.id.animation2);
Animation aniamtion = AnimationUtils.loadAnimation(this, R.anim.test);
img2.startAnimation(aniamtion);

ok,补件动画结束。
(3)属性动画
在Android3.0后,推出了属性动画,取代补件动画。重点.
ValueAniamtion,ObjectAniamtion。
郭神有经典的博客。
一个简单的使用。

    private void startAniamtion(View view, int distance) {
        AnimatorSet sets = new AnimatorSet().setDuration(1000);
        ObjectAnimator yAnimator = new ObjectAnimator();
        yAnimator.setProperty(View.TRANSLATION_Y);
        yAnimator.setInterpolator(new OvershootInterpolator());
        yAnimator.setFloatValues(0, distance);
        yAnimator.setTarget(view);
        addLayerListener(yAnimator, view);
        ObjectAnimator alphaAniamtor = new ObjectAnimator();
        alphaAniamtor.setProperty(View.ALPHA);
        alphaAniamtor.setFloatValues(0, 1);
        alphaAniamtor.setTarget(view);
        sets.play(yAnimator).with(alphaAniamtor);
        sets.start();
    }

至此。
Android中的动画主要就这些,对于View的一些变换还有矩阵,Matrix。找时间总结一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值