Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画-阿里云开发者社区

开发者社区> sahadev> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画
原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画。
979 0
Android官方开发文档Training系列课程中文版:连接无线设备之通过WIFI创建P2P连接
原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/wifi-direct.html#permissions Wi-Fi peer-to-peer (P2P) APIs可以使程序与附近的设备进行直接通讯,Android的Wi-Fi P2P框架由Wi-Fi Direct™提供技术支持。
757 0
Android官方开发文档Training系列课程中文版:网络操作之网络连接
原文地址:http://android.xsoftlab.net/training/basics/network-ops/index.html 引言 这节课将会学习最基本的网络连接,监视网络连接状况及网络控制等内容。
676 0
Android官方开发文档Training系列课程中文版:网络操作之网络管理
原文地址:http://android.xsoftlab.net/training/basics/network-ops/managing.html 这节课将会学习如何对网络资源的使用情况拥有更细粒度的控制力。
597 0
Android官方开发文档Training系列课程中文版:通知用户之更新或移除通知
原文地址:http://android.xsoftlab.net/training/notify-user/managing.html#Removing 当需要在不同时段发布同一事件类型的通知时,应当避免创建新的通知。
637 0
Android官方开发文档Training系列课程中文版:通知用户之创建不同导航方式的Activity
原文地址:http://android.xsoftlab.net/training/notify-user/navigation.html 设计通知时要考虑到用户所预想的导航体验。
670 0
Android官方开发文档Training系列课程中文版:网络操作之XML解析
原文地址:http://android.xsoftlab.net/training/basics/network-ops/xml.html 扩展标记语言(XML)是一系列有序编码的文档。
555 0
Frame - 快速创建高品质的 Web 应用原型
  Frame 是一个让你够能够快速创建高品质的网站或应用程序产品原型的工具。你上传的图片将被包裹在真实的设备环境中。它是一个用于创建宣传资料的专业工具。Frame 完全免费供给商业和个人使用。他们也正探索一种可能性,增加额外的功能给那些正在寻找特色功能的用户,但没有计划立即开始收费。
600 0
+关注
sahadev
移动开发方向专家
183
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载