Android属性动画

这篇具有很好参考价值的文章主要介绍了Android属性动画。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

Android属性动画,Android基础,android,nginx,运维

一、导读

我们继续总结学习基础知识,温故知新。

二、概览

属性动画系统是一个强健的框架,用于为几乎任何内容添加动画效果。您可以定义一个随时间更改任何对象属性的动画,无论其是否绘制到屏幕上。
属性动画会在指定时长内更改属性(对象中的字段)的值。要添加动画效果,请指定要添加动画效果的对象属性,
例如对象在屏幕上的位置、动画效果持续多长时间以及要在哪些值之间添加动画效果。

借助属性动画系统,您可以定义动画的以下特性:

  • 时长:您可以指定动画的时长。默认时长为 300 毫秒。
  • 时间插值:您可以指定如何根据动画的当前已播放时长来计算属性的值。
  • 重复计数和行为:您可以指定是否在某个时长结束后重复播放动画以及重复播放动画多少次。您还可以指定是否要反向播放动画。如果将其设置为反向播放,则会先播放动画,然后反向播放动画,直到达到重复次数。
  • Animator 集:您可以将动画分成多个逻辑集,它们可以一起播放、按顺序播放或者在指定的延迟时间后播放。
  • 帧刷新延迟:您可以指定动画帧的刷新频率。默认设置为每 10 毫秒刷新一次,但应用刷新帧的速度最终取决于整个系统的繁忙程度以及系统为底层计时器提供服务的速度。

三、常用API

3.1 ValueAnimator

属性动画的主计时引擎,它也可计算要添加动画效果的属性的值。它具有计算动画值所需的所有核心功能,同时包含每个动画的计时详情、有关动画是否重复播放的信息、
用于接收更新事件的监听器以及设置待评估自定义类型的功能。为属性添加动画效果分为两个步骤:计算添加动画效果之后的值,以及对要添加动画效果的对象和属性设置
这些值。

ValueAnimator 不会重复,因此,您必须监听由 ValueAnimator 计算的值的更新情况,并使用您自己的逻辑修改要添加动画效果的对象。

3.2 ObjectAnimator

这是 ValueAnimator 的子类,用于设置目标对象和对象属性以添加动画效果
此类会在计算出动画的新值后相应地更新属性。在大多数情况下,您不妨使用 ObjectAnimator,因为它可以极大地简化对目标对象的值添加动画效果这一过程。不过,有时您需要直接使用 ValueAnimator,
因为 ObjectAnimator 存在其他一些限制,例如要求目标对象具有特定的访问器方法。

3.3 AnimatorSet

此类提供一种将动画分组在一起的机制,以使它们彼此相对运行。您可以将动画设置为一起播放、按顺序播放或者在指定的延迟时间后播放。

插值器

时间插值器指定了如何根据时间计算动画中的特定值。例如,您可以指定动画在整个动画中以线性方式播放,即动画在整个播放期间匀速移动;也可以指定动画使用非线性时间,
例如动画在开始后加速并在结束前减速。 下面表格 介绍了 android.view.animation 中包含的插值器。
如果下表提供的插值器都不能满足您的需求,请实现 TimeInterpolator 接口并创建您自己的插值器。

类/接口 说明
AccelerateDecelerateInterpolator 该插值器的变化率在开始和结束时缓慢但在中间会加快。
AccelerateInterpolator 该插值器的变化率在开始时较为缓慢,然后会加快。
AnticipateInterpolator 该插值器先反向变化,然后再急速正向变化。
AnticipateOvershootInterpolator 该插值器先反向变化,再急速正向变化,然后超过定位值,最后返回到最终值。
BounceInterpolator 该插值器的变化会跳过结尾处。
CycleInterpolator 该插值器的动画会在指定数量的周期内重复。
DecelerateInterpolator 该插值器的变化率开始很快,然后减速。
LinearInterpolator 该插值器的变化率恒定不变。
OvershootInterpolator 该插值器会急速正向变化,再超出最终值,然后返回。
TimeInterpolator 该接口用于实现您自己的插值器。

四、属性动画的使用

可以在xml中定义,也可直接在代码中使用

4.1 xml中定义属性动画

  1. 新建目录及文件 res/animator/filename.xml

语法如下:

<set
  android:ordering=["together" | "sequentially"]>     指定此集合中动画的播放顺序,  sequentially	依序播放此集合中的动画。 together(默认)	同时播放此集合中的动画。

    <objectAnimator
        android:propertyName="string"                     要添加动画效果的对象的属性,如"alpha" 或 "backgroundColor"
        android:duration="int"                            整数。动画的时间,以毫秒为单位。默认为 300 毫秒。
        android:valueFrom="float | int | color"           浮点数、整数或颜色。动画属性的起始值。如果未指定,则动画将从属性的 get 方法获得的值开始。颜色以六位十六进制数字表示,例如 #333333。
        android:valueTo="float | int | color"             浮点数、整数或颜色。必需。动画属性的结束值。颜色以六位十六进制数字表示,例如 #333333
        android:startOffset="int"                         整数。调用 start() 后动画延迟的毫秒数
        android:repeatCount="int"                         整数。动画的重复次数。设为 "-1" 表示无限次重复,也可设为正整数。例如,值 "1" 表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为 "0",表示不重复。
        android:repeatMode=["restart" | "reverse"]        整数。动画播放到结尾处的行为。android:repeatCount 必须设置为正整数或 "-1",该属性才有效。设置为 "reverse" 可让动画在每次迭代时反向播放,设置为 "restart" 则可让动画每次从头开始循环播放。
        android:valueType=["intType" | "floatType"]/>     如果值为颜色,则不要指定此属性。动画框架会自动处理颜色值。  intType	指定动画值为整数。    floatType(默认)	指定动画值为浮点数。

    <animator
        android:duration="int"                            整数。动画的时间,以毫秒为单位。默认为 300 毫秒。
        android:valueFrom="float | int | color"           浮点数、整数或颜色。必需。动画的起始值。颜色以六位十六进制数字表示,例如 #333333。
        android:valueTo="float | int | color"             浮点数、整数或颜色。必需。动画的结束值。颜色以六位十六进制数字表示,例如 #333333。
        android:startOffset="int"                         整数。调用 start() 后动画延迟的毫秒数。
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

其实也可以不用 set包裹,定义单一的动画

<objectAnimator
    android:propertyName="string"
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["restart" | "reverse"]
    android:valueType=["intType" | "floatType"]/>

<animator
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["restart" | "reverse"]
    android:valueType=["intType" | "floatType"]/>

  1. 资源引用:
    在 Java 或 Kotlin 代码中:R.animator.filename
    在 XML 中:@[package:]animator/filename

我们举例:
定义xml动画,然后在代码中调用开始动画。

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

开始动画

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.animator.property_animator);
set.setTarget(myObject);            // 必须操作
set.start();

4.2 代码中定义属性动画

4.2.1 使用 ValueAnimator 添加动画效果

借助 ValueAnimator 类,您可以为动画播放期间某些类型的值添加动画效果,只需指定一组要添加动画效果的 int、float 或颜色值即可。
您可以通过调用 ValueAnimator 的任一工厂方法来获取它:ofInt()、ofFloat() 或 ofObject()。例如:

    ValueAnimator animation = ValueAnimator.ofFloat(0f, 100f);
    animation.setDuration(1000);
    
    animator.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationStart(Animator animation) {
        }

        @Override
        public void onAnimationResume(Animator animation) {
        }

        @Override
        public void onAnimationPause(Animator animation) {

        }

        @Override
        public void onAnimationCancel(Animator animation) {
        }

        @Override
        public void onAnimationEnd(Animator animation) {
        }
    });
    
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            // do something
        }
    });
    animator.setRepeatCount(2);
    animator.setRepeatMode(ValueAnimator.RESTART);
    animator.setInterpolator(interpolator);
    animation.start();
    

在上述代码中,当 start() 方法运行时,ValueAnimator 会开始计算 1000ms 时长内 0 和 100 之间的动画的值。

4.2.2 使用 ObjectAnimator 添加动画效果

ObjectAnimator 是上一部分中讨论的 ValueAnimator 的子类,它融合了 ValueAnimator 的计时引擎和值计算以及为目标对象的命名属性添加动画效果这一功能。
这可以极大地简化为任何对象添加动画效果的过程,因为动画属性会自动更新,因此您也无需再实现 ValueAnimator.AnimatorUpdateListener 了。

    
    ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, "alpha", 0.3f, 1f);
    objectAnimator1.setDuration(1000);
    objectAnimator1.setRepeatCount(ValueAnimator.INFINITE);
    objectAnimator1.setRepeatMode(ValueAnimator.REVERSE);
    objectAnimator1.start();

上面的代码是修改view的透明度,看到构造方法里面的那个 “alpha” 了吧,我们在构造时,传入的对象,如上面的view,
必须包含有setAlpha()方法,否则设置是失败的,我们看view的源码,发现果然有

public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) 

还有很多其他的
public void setRotation(float rotation) 
public void setRotationX(float rotation) 
public void setRotationY(float rotation) 
public void setBackgroundColor(@ColorInt int color)
public void setScaleX(float scaleX)
public void setScaleY(float scaleX)
public void setTranslationX(float translationX)
public void setTranslationY(float translationX)
等等

所以可以有


    ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "translationX", 0f, xValue, 0f);

    ObjectAnimator animator2 = ObjectAnimator.ofFloat(view, "translationY", 0f, yValue, 0f);
    
    ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, "scaleX", 1f, 0.95f, 1f, 0.95f);
    
    ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, "scaleY", 1f, 0.95f, 1f, 0.95f);

    ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, "rotation", 0.0F, 360f);
    等等

这里面的属性可以随意指定,只要我们要做动画的类中包含有该属性的set方法,例如:

public class Test {
    public final void setProcess(final float process) {
        
    }
    ObjectAnimator mProcessAnimator = ObjectAnimator.ofFloat(this, "process", 0, 0)
}

注意事项

要使 ObjectAnimator 正确更新属性,您必须执行以下操作:

  • 要添加动画效果的对象属性必须具有 set() 形式的 setter 函数(采用驼峰式大小写形式)。由于 ObjectAnimator 会在动画过程中自动更新属性,它必须能够使用此 setter 方法访问该属性。例如,如果属性名称为 foo,则需要使用 setFoo() 方法。如果此 setter 方法不存在,您有三个选择:
    • 如果您有权限,可将 setter 方法添加到类中。
    • 使用您有权更改的封装容器类,让该封装容器使用有效的 setter 方法接收值并将其转发给原始对象。
    • 改用 ValueAnimator。
  • 如果您在 ObjectAnimator 的一个工厂方法中仅为 values… 参数指定了一个值,则系统会假定它是动画的结束值。
    因此,要添加动画效果的对象属性必须具有用于获取动画起始值的 getter 函数。getter 函数必须采用 get() 形式。例如,如果属性名称为 foo,则需要使用 getFoo() 方法。
  • 要添加动画效果的属性的 getter(如果需要)和 setter 方法的操作对象必须与您为 ObjectAnimator 指定的起始值和结束值的类型相同。
    例如,如果构建以下 ObjectAnimator,则必须具有 targetObject.setPropName(float) 和 targetObject.getPropName(float):
    ObjectAnimator.ofFloat(targetObject, "propName", 1f)
  • 根据您要添加动画效果的属性或对象,您可能需要对视图调用 invalidate() 方法,以强制屏幕使用添加动画效果之后的值重新绘制自身。
    您可以在 onAnimationUpdate() 回调中执行此操作。例如,如果为可绘制对象的颜色属性添加动画效果,则仅当该对象重新绘制自身时,屏幕才会刷新。
    视图的所有属性 setter(如 setAlpha() 和 setTranslationX())都会使视图失效,因此,在使用新值调用这些方法时,您无需使视图失效。如需详细了解监听器,请参阅动画监听器部分。

4.2.3 使用 AnimatorSet 编排多个动画

使用AnimatorSet ,可以指定是同时播放动画、按顺序播放还是在指定的延迟时间后播放。还可以相互嵌套 AnimatorSet 对象。

举例:
以下代码段通过以下方式播放相应的 Animator 对象:

1、播放 bounceAnim。
2、同时播放 squashAnim1、squashAnim2、stretchAnim1 和 stretchAnim2。
3、播放 bounceBackAnim。
4、播放 fadeAnim。

    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();
    

下面同时播放3个动画


    
    ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, "alpha", 0.3f, 1f);
    objectAnimator1.setDuration(1000);
    objectAnimator1.setRepeatCount(ValueAnimator.INFINITE);
    objectAnimator1.setRepeatMode(ValueAnimator.REVERSE);

    ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, "rotation", 0.0F, 360f);
    objectAnimator2.setDuration(5000);
    objectAnimator2.setRepeatCount(ValueAnimator.INFINITE);
    
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.setInterpolator(new LinearInterpolator());
    animatorSet.playTogether(objectAnimator1, objectAnimator2);
    animatorSet.start();

4.2.4 动画监听器

您可以使用下述监听器来监听动画播放期间的重要事件。

  • Animator.AnimatorListener

    • onAnimationStart() - 在动画开始播放时调用。
    • onAnimationEnd() - 在动画结束播放时调用。
    • onAnimationRepeat() - 在动画重复播放时调用。
    • onAnimationCancel() - 在动画取消播放时调用。取消的动画也会调用 onAnimationEnd(),无论它们以何种方式结束。
  • ValueAnimator.AnimatorUpdateListener

    • onAnimationUpdate() - 对动画的每一帧调用。监听此事件即可使用 ValueAnimator 在动画播放期间生成的计算值。要使用该值,请查询传递到事件中的 ValueAnimator 对象,
      以使用 getAnimatedValue() 方法获取当前添加动画效果之后的值。如果使用了 ValueAnimator,则必须实现此监听器。

4.2.5 为 ViewGroup 对象的布局更改添加动画效果

将 ViewGroup 的 android:animateLayoutchanges 属性设置为 true,将此属性设置为 true 可自动为添加到 ViewGroup 或从中删除的视图以及该 ViewGroup 中剩余的视图添加动画效果
eg:

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/verticalContainer"
        android:animateLayoutChanges="true" />
    

4.2.6 使用 StateListAnimator 为视图状态更改添加动画效果

使用根 元素和子 元素在 XML 资源中定义 StateListAnimator,每个元素都指定一个由 StateListAnimator 类定义的不同视图状态。每个 都包含一个属性动画集的定义。

例如,以下文件创建了一个状态列表 Animator,可在按下后更改视图的 x 和 y 比例:
res/xml/animate_scale.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- the pressed state; increase x and y size to 150% -->
        <item android:state_pressed="true">
            <set>
                <objectAnimator android:propertyName="scaleX"
                    android:duration="@android:integer/config_shortAnimTime"
                    android:valueTo="1.5"
                    android:valueType="floatType"/>
                <objectAnimator android:propertyName="scaleY"
                    android:duration="@android:integer/config_shortAnimTime"
                    android:valueTo="1.5"
                    android:valueType="floatType"/>
            </set>
        </item>
        <!-- the default, non-pressed state; set x and y size to 100% -->
        <item android:state_pressed="false">
            <set>
                <objectAnimator android:propertyName="scaleX"
                    android:duration="@android:integer/config_shortAnimTime"
                    android:valueTo="1"
                    android:valueType="floatType"/>
                <objectAnimator android:propertyName="scaleY"
                    android:duration="@android:integer/config_shortAnimTime"
                    android:valueTo="1"
                    android:valueType="floatType"/>
            </set>
        </item>
    </selector>
    

要将状态列表 Animator 附加到视图,请添加 android:stateListAnimator 属性,如下所示:

    <Button android:stateListAnimator="@xml/animate_scale"
            ... />
    

现在,当此按钮的状态发生变化时,会使用 animate_scale.xml 中定义的动画。

或者,如果要转为在代码中将状态列表 Animator 分配给视图,则可使用 AnimatorInflater.loadStateListAnimator() 方法,
然后使用 View.setStateListAnimator() 方法将 Animator 分配给相应视图。

您还可以使用 AnimatedStateListDrawable 在状态更改间播放可绘制动画,而不是为视图的属性添加动画效果。
Android 5.0 中的一些系统微件默认会使用这些动画。以下示例展示了如何将 AnimatedStateListDrawable 定义为 XML 资源:

    <!-- res/drawable/myanimstatedrawable.xml -->
    <animated-selector
        xmlns:android="http://schemas.android.com/apk/res/android">

        <!-- provide a different drawable for each state-->
        <item android:id="@+id/pressed" android:drawable="@drawable/drawableP"
            android:state_pressed="true"/>
        <item android:id="@+id/focused" android:drawable="@drawable/drawableF"
            android:state_focused="true"/>
        <item android:id="@id/default"
            android:drawable="@drawable/drawableD"/>

        <!-- specify a transition -->
        <transition android:fromId="@+id/default" android:toId="@+id/pressed">
            <animation-list>
                <item android:duration="15" android:drawable="@drawable/dt1"/>
                <item android:duration="15" android:drawable="@drawable/dt2"/>
                ...
            </animation-list>
        </transition>
        ...
    </animated-selector>
    

4.2.7 使用 TypeEvaluator

如果要为 Android 系统无法识别的类型添加动画效果,则可以通过实现 TypeEvaluator 接口来创建您自己的评估程序。
Android 系统可以识别的类型为 int、float 或颜色,分别由 IntEvaluator、FloatEvaluator 和 ArgbEvaluator 类型评估程序提供支持。

TypeEvaluator 接口中只有一种要实现的方法,那就是 evaluate() 方法。这样,您使用的 Animator 就会在动画的当前点为添加动画效果之后的属性返回适当的值。FloatEvaluator 类演示了如何做到这一点:

    public class FloatEvaluator implements TypeEvaluator {

        public Object evaluate(float fraction, Object startValue, Object endValue) {
            float startFloat = ((Number) startValue).floatValue();
            return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
        }
    }
    

4.2.8 指定关键帧

Keyframe 对象由时间值对组成,用于在动画的特定时间定义特定的状态。每个关键帧还可以用自己的插值器控制动画在上一关键帧时间和此关键帧时间之间的时间间隔内的行为。

要实例化 Keyframe 对象,您必须使用它的任一工厂方法(ofInt()、ofFloat() 或 ofObject())来获取类型合适的 。然后,通过调用 ofKeyframe() 工厂方法来获取 PropertyValuesHolder 对象。
获取对象后,您可以通过传入 PropertyValuesHolder 对象以及要添加动画效果的对象来获取 Animator。以下代码段演示了如何做到这一点:

    Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
    Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
    Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
    PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
    ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation);
    rotationAnim.setDuration(5000);
    

动画

五、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏
Android属性动画,Android基础,android,nginx,运维文章来源地址https://www.toymoban.com/news/detail-761990.html

到了这里,关于Android属性动画的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android学习笔记】Android布局属性大全

    第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft 贴紧父元素的左边缘 android:layout_alignParentRight 贴紧父元素的右边缘

    2024年01月16日
    浏览(37)
  • Android 动画

    属性动画: ViewPropertyAnimator ViewPropertyAnimator  = view.animate()  示例: 改变view的属性值,大小 位置 偏移等,限制比较多 ofFloat(target ,name,values):   java则需要在view类中声明name值的方法 不然会报错,kotlin则自动生成 kotlin: java 如果此view改变需要进行invalidate 或者postinvalidate canvas.with

    2024年02月09日
    浏览(31)
  • android最全的动画讲解

    android的动画一共分为三种,view动画,帧动画,属性动画。 什么是 view动画, 动画的对象只能是view的动画叫做 view动画。 view动画一共分为四种: TranslateAnimation (平移), ScaleAnimation (缩放), RotateAnimation (旋转), AlphaAnimation (透明度)四种动画。还有一个 AnimationSet (组

    2024年02月09日
    浏览(33)
  • Android远程过渡动画

    Android的系统动画我分为三类:窗口动画,过渡动画,旋转动画。而这篇文章将分析过渡动画。而过渡动画根据创建leash和运行动画是否在同一个进程可以分为本地过渡动画和远程过渡动画,启动远程过渡动画流程相比于其他系统动画的过程,因为涉及到了跨进程,所以涉及到

    2024年01月21日
    浏览(53)
  • Android Fragment动画实现

    在 Android 中,你可以使用 FragmentTransaction 来实现 Fragment 的动画效果。这允许你在添加、替换或移除 Fragment 时应用动画,从而改善用户体验。下面是如何实现 Fragment 动画的基本步骤: 1. 创建两个 Fragment: 首先,创建两个 Fragment,例如 FragmentA 和 FragmentB。这些 Fragment 将被用于

    2024年02月09日
    浏览(44)
  • android更换开机动画

    2024年02月16日
    浏览(34)
  • Android动画进阶

    在Android中,实现动画的方式通常有两种:视图动画和属性动画。然而这两种方式只能实现一些较为简单动画,仅仅通过改变这些控件属性的方式实现一些复杂的动画效果是比较有难度的,那么我们该如何实现复杂的动画。这里介绍两种实现方式:PathMeasure和SVG。 PathMeasure是

    2023年04月09日
    浏览(41)
  • Android - 动画

    官方页面:动画简介 官方页面:属性动画概览 官方页面:使用动画显示或隐藏视图 属性动画 PeopertyAnimation view的属性根据执行的动画发生真实的改变,通过不断设置View的属性实现。 视图动画(补间动画) ViewAnimation(Tween) 视图动画的作用对象是View。不改变view的位置和属

    2024年02月02日
    浏览(32)
  • Android 动画详解

    学习Android必不可少的就是动画的使用了,在Android版本迭代的过程中,出现了很多动画框架,这里做一个总结。 逐帧动画【Frame Animation】,即顺序播放事先准备的图片。 补间动画【Tween Animation】,View的动画效果可以实现简单的平移、缩放、旋转。 属性动画【Property Animation】

    2024年02月14日
    浏览(36)
  • Android开机动画

    android12-release 推荐 Android 12 开机动画代码与流程详解 一般使用 rle格式图片 ;例如放在 splash分区 记录 kernel/drivers/video/msm/msm_fb.c 也是读出根目录下的xx.rle,并显示为开机画面 使用BootAnimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按格式要求做 bootanimati

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包