Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画

简介: 原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html自定义转场可以创建自定义动画。

原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html

自定义转场可以创建自定义动画。比如,可以定义一种动画来更改文本的颜色或者将输入框的颜色置灰以表示不可用。

自定义转场与内置转场相同,都作用在View之上。不过与内置转场不同的是,还需要另外写一些代码来捕获转场过程的属性值,并生成相关动画。

这节课将会学习如何获取属性值,并生成相关动画。

继承Transition类

为了创建自定义转场,需要继承Transition,并重写以下方法:

public class CustomTransition extends Transition {
    @Override
    public void captureStartValues(TransitionValues values) {}
    @Override
    public void captureEndValues(TransitionValues values) {}
    @Override
    public Animator createAnimator(ViewGroup sceneRoot,
                                   TransitionValues startValues,
                                   TransitionValues endValues) {}
}

下面的部分会学习如何重写这些方法。

获取View的属性值

转场动画使用了属性动画系统。属性动画通过更改View的属性实现了属性动画,所以转场框架需要使用属性的启动值与结束值来构造动画。

属性动画通常只会用到View的极少属性。比如,颜色动画需要颜色属性值,平移动画需要位置属性值。因为转场动画只需要某些特定的属性值,所以转场框架并没有将所有的属性值提供给转场动画。相反的,转场框架会调用回调方法以便允许转场动画获得需要的属性值,并将其存入框架中。

获得起始值

为了可以将起始的View值传给转场框架,需要实现captureStartValues(transitionValues)方法。转场框架会在每个View处于启动场景时调用该方法。这个方法的参数是一个TransitionValues对象,这个对象包含了View的引用及一个Map对象,你可以将View的属性值存放在这个Map对象中,然后这些值就会被传给转场框架。

为了确保所存储的属性值的键不会与其它TransitionValues的键相冲突,可以使用以下命名规则:
package_name:transition_name:property_name

下面的代码展示了captureStartValues()方法的实现:

public class CustomTransition extends Transition {
    // Define a key for storing a property value in
    // TransitionValues.values with the syntax
    // package_name:transition_class:property_name to avoid collisions
    private static final String PROPNAME_BACKGROUND =
            "com.example.android.customtransition:CustomTransition:background";
    @Override
    public void captureStartValues(TransitionValues transitionValues) {
        // Call the convenience method captureValues
        captureValues(transitionValues);
    }
    // For the view in transitionValues.view, get the values you
    // want and put them in transitionValues.values
    private void captureValues(TransitionValues transitionValues) {
        // Get a reference to the view
        View view = transitionValues.view;
        // Store its background property in the values map
        transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground());
    }
    ...
}

获得结束值

转场框架会在每次场景结束时调用captureEndValues(TransitionValues)方法。至于其它方面,该方法内部的实现逻辑与获取开始值的逻辑一致。

下面的代码段展示了captureEndValues方法的实现:

@Override
public void captureEndValues(TransitionValues transitionValues) {
    captureValues(transitionValues);
}

在这个示例中,captureStartValues()方法与captureEndValues()方法都会调用captureValues()方法来获取值然后存储这些值。在captureValues()方法中获取View属性都相同,只是启动场景与结束场景获得的属性值不同。转场框架对起始场景与结束场景分别维护了各自的Map实例。

创建自定义Animator

为了使View在转场的时候可以以动画的方式变动,需要重写createAnimator()方法,并返回一个Animator对象。在转场框架调用这个方法时,会将变幻场景的根View与TransitionValues对象传回。启动TransitionValues对象包含了转场过程中所捕获的属性值。

createAnimator()方法的调用取决于启动场景与结束场景变换的过程。试着将淡入淡出动画想象为自定义转场动画。如果启动场景有5个target,而到了结束场景时被移除了两个,并且还添加了一个新的target,那么转场框架会调用createAnimator()方法6次:其中三个在启动场景与结束场景中都在出现,其中两个在转变到结束场景的过程中被移除了,最后一个在转换到结束场景时被添了进去。

对于在开始场景与结束场景中都存在的target View,转场框架会在调用createAnimator()方法时将TransitionValues对象通过startValues参数与endValues参数回传。对于只存在于单个场景的target View,转场框架会通过对应的参数将TransitionValues对象回传,而另一个参数则为空。

在实现createAnimator(ViewGroup, TransitionValues, TransitionValues)方法时,使用所捕获的属性值来创建一个Animator对象,并将其返回给转场框架。对于实现的示例,请参见CustomTransition示例中的ChangeColor类。有关更多属性动画的相关信息,请参见Property Animation

使用自定义转场动画

自定义转场动画与内置转场动画的使用方式相同。同样可以通过转场管理者使用自定义转场动画,具体使用描述请参见Applying a Transition

目录
相关文章
|
8月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
194 2
基于Android P,自定义Android开机动画的方法
|
6月前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
9月前
|
XML Android开发 UED
Android动画之共享元素动画简单实践
本文介绍Android共享元素动画, 实现两Activity间平滑过渡特定UI元素。通过设置`transitionName`属性和使用`ActivityOptions.makeSceneTransitionAnimation`启动目标Activity实现动画效果。可自定义过渡动画提升体验。
127 0
|
Android开发
Android自定义View,制作饼状图带动画效果
一个简单的自定义view饼状图,加入了动画效果
175 0
|
Java Android开发 Kotlin
Android 自定义加载动画Dialog弹窗
Android 自定义加载动画Dialog弹窗
384 0