Android三种动画介绍

 

  • 帧动画

 

加载一系列的图片资源来创建动画。

缺点:加载多图耗费内存。

(1)在目录res/drawable/创建动画资源文件。

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

oneshot设置为true表示只循环一次,并停留在最后一帧。false动画将循环展示。

(2)设置为View的背景并播放。

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();

注意start方法不能在Activity的onCreate方法中调用,因为动画图片还没有完全附在窗口上。想立即播放动画,可在onWindowFocusChanged()中调用,它在Android将窗口变成焦点时回调。
 

 

  • View(视图)动画

 

定义起始,中止状态渐变完成动画效果。可在资源文件和代码中定义动画,在资源文件中可读性更强。

(1)在目录 res/anim/ 创建动画资源文件。

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

startOffset 属性设定执行的顺序。

某些值,如pivotX,可以相对于对象本身或相对于父对象来指定。“50”相对于父对象的50%,或者“50%”相对于自身的“50%”。

interpolator 插值器:确定如何随时间变化应用变换。

(2)使用动画。

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

缺:不具有交互性,某个元素发生View动画后,其响应事件的位置依然在动画进行前的地方,只能做普通的动画效果,要避免设计交互操作。

优:使用方便,效率比较高。

 

 

  • 属性动画

 

Android3.0之后推出的动画框架。动画计算过程:

ValueAnimator

使用工厂方法创建ValueAnimator 

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();

这段代码对对象没有实际影响,因为ValueAnimator 不直接操作对象属性。需要设定动画事件监听获取新的计算值来刷新。

 ObjectAnimator

 ObjectAnimator继承自ValueAnimator ,不用实现ValueAnimator.AnimatorUpdateListener,会自动更新动画属性。

ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();

用AnimatorSet编排多个动画

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();

before在谁之前,with和谁一起,after在谁之后。

 

  • 插值器Interpolator

插值器是动画修改器,影响动画中的变化率,动画效果可以加速、减速、重复、弹跳等。

LinearInterpolator

线性插值器,其变化率是固定的

AccelerateInterpolator

加速插值器,其变化速率开始缓慢,然后加速

DecelerateInterpolator

减速插值器

AccelerateDecelerateInterpolator

加速减速插值器,其变化速率开始和结束缓慢但中间加速。

CycleInterpolator

循环插值器,为指定的循环次数重复动画。变化率遵循正弦模式。

OvershootInterpolator

超过插值器,其变化向前超过最终值,然后回来

AnticipateInterpolator

预插值器,其变化开始向后,然后飞快地返回最终值

AnticipateOvershootInterpolator

向后向前插值器,其变化开始向后,然后向前和超过目标值,最后返回到最终值。

BounceInterpolator

边界插值器,其变化在末端反弹

 

Android三点加载动画是一种常见的加载效果,它通常使用三个连续的点来表示正在进行的操作。在实现这种效果的过程中,可以使用自定义控件来模拟IOS版UC浏览器的三点加载动画效果。 首先,需要在Activity中创建一个Handler,并在onCreate方法中进行初始化。然后,创建一个Runnable对象,通过该对象实现动画的循环播放。在Runnable的run方法中,可以通过改变点的数量和位置来实现动画效果。在每次循环中,通过设置TextView的文本来显示不断变化的点的数量和位置。最后,通过调用Handler的postDelayed方法来延迟一定时间后再次执行Runnable对象,从而实现动画的循环播放。 通过以上步骤,就可以在Android应用中实现三点加载动画效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [安卓自定义控件-实现IOS版UC浏览器三点加载动画效果](https://download.csdn.net/download/oushangfeng123/9416238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [android 简单的加载动画(3个点...)](https://blog.csdn.net/qq_29364417/article/details/119384631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值