在共享元素活动转换中对嵌套视图进行动画处理时出现故障?

2023-11-21

我一直在摆弄 Android 5.0 中的新 API,并一直在尝试弄清楚是否可以同时为ViewGroup及其子元素之一在一次操作期间分别作为共享元素活动转换.

下面的屏幕截图给出了我想要实现的目标的简化示例:

First Activity initial positions Second Activity final positions

在第一个活动中,深灰色框是ViewGroup位于屏幕中央,红色框是它的子项View(我正在使用的布局XML代码可以找到here)。当用户单击深灰色框时,深灰色框应逐渐放大以填充第二个活动的背景。同时,红色框应逐渐缩放并重新定位在第二个活动的左上角。

活动和动画代码

The Activity我用来执行转换的代码很简单:

/** FirstActivity.java */
public class FirstActivity extends Activity implements View.OnClickListener {
    private View mOuterBox, mInnerBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
        getWindow().setSharedElementExitTransition(new ChangeBounds());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        mOuterBox = findViewById(R.id.outer_box);
        mInnerBox = findViewById(R.id.inner_box);
        mOuterBox.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName());
        Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName());
        Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle();
        startActivity(new Intent(this, SecondActivity.class), bundle);
    }
}

/** SecondActivity.java */
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
        getWindow().setSharedElementEnterTransition(new ChangeBounds());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
}

问题

当我单击第一个活动中的深灰色框时,共享元素转换开始,并且深灰色框很好地放大以填充第二个活动的背景。然而,红色框似乎根本没有动画。一旦过渡开始,在灰色框甚至完成动画之前,红色框会突然调整大小并将其自身定位到第二个活动中的最终位置。

我的问题

是否可以同时制作动画ViewGroup并且它的一个/一些/所有子元素独立地视为一个共享元素Activity过渡?如果是这样,我做错了什么,我能做些什么来确保孩子们的视图也被动画化?

如果您在理解我的描述时遇到困难,可以在以下位置找到此示例项目的完整源代码GitHub并且可以下载可运行的APKhere(您需要运行 Android 5.0 的物理设备或模拟器才能运行 APK)。


是的,您可以单独转换组及其内容。但您刚刚发现了一个错误,该错误将在 L MR1 中修复。

看来 L 中对此没有很好的支持。我建议您在第二个 Activity 中将共享元素设为同级:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/dark_gray"
        android:transitionName="outer_box"/>

    <RelativeLayout
        android:id="@+id/outer_box"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <View
            android:id="@+id/inner_box"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginLeft="50dp"
            android:layout_marginTop="50dp"
            android:background="@color/red"
            android:transitionName="inner_box" />
    </RelativeLayout>
</FrameLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在共享元素活动转换中对嵌套视图进行动画处理时出现故障? 的相关文章

随机推荐

  • 发送投票电子邮件

    使用 Outlook API 可以通过在 MailItem 实例上设置 VotingOpions 属性来发送带有民意调查的电子邮件 是否可以以任何方式对 Exchange Web 服务执行相同的操作 Microsoft 已经发布了投票电子邮
  • 在Python中将点后的浮点四舍五入到2位数字

    我正在使用这段代码 f 0 3223322 float 2f f 有没有更Pythonic 更简洁的方法 无需两次转换 使用round文档中的以下注释令人沮丧 round 对于浮点数的行为可能会令人惊讶 例如 round 2 675 2 给
  • 在 pandas MultiIndex 前面添加一个级别

    我有一个 DataFrame 其中经过一些分组后创建了 MultiIndex import numpy as np import pandas as pd from numpy random import randn df pd DataF
  • 如何使用mockito验证公共类的静态方法被调用?

    伪代码是这样的 rc SomePublicClass myPublicStaticFunc arg public class SomePublicClass private SomePublicClass public static int
  • 创建过程中忽略 Config.xml

    我在使用命令行工具时遇到问题科尔多瓦 cli 我遵循了从文档 cordova create test com test 测试 在这一步中我要更改的内容www folder 1 将示例网页移至src文件夹 所以内容www are www co
  • git 子模块添加致命错误:不是 Git 存储库

    我对 Git 相当陌生 并尽力寻找有关此问题的一些文档 但无济于事 这是我的命令 git submodule add https github com joliver EventStore git externalsource JOlive
  • IEnumerator 是否有“HasNext”方法?

    使用JavaIterators 我已经用过hasNext确定迭代是否有更多元素的方法 不消耗元素 因此 hasNext就像一个 Peek 方法 我的问题 有没有类似 hasNext or Peek 具有 C 泛型的方法IEnumerator
  • 在 Apple Swift 中,在什么情况下我不想要隐式展开的可选选项?

    我相信我理解为什么可选值很方便 我最好的使用想法是能够返回一个 nil 布尔值 但是在什么情况下我想使用 声明一个包装的可选值 而不是 对于隐式解包的可选 似乎没有必要用 来声明它 然后必须打字 到处都是 而不仅仅是使用 一次 我不想忽视
  • Typescript 中的类型推断与显式类型声明

    我遇到过几个不同的代码实例 其中变量使用显式类型声明 即使推断的类型很明显 例子 loading boolean false or name string John or count number 0 etc TSLint 更喜欢推断类型而
  • Node.js - 使用每秒 5 个请求的 API 限制

    我有一个 脚本 可以对特定 API 执行数千个请求 这个 API 每秒只允许 5 个请求 可能它的测量结果与我不同 提出我正在使用的请求request promise框架 我已经取代了正常的request promise与此功能 const
  • org.hibernate.PropertyAccessException:IllegalArgumentException

    我正在研究 hibernate 映射 除了当 hibernate 尝试将我的对象保留到系统中时遇到的 PropertyAccessException 之外 其他一切都工作正常 下面是堆栈跟踪 org hibernate PropertyAc
  • 使用角色模拟租户

    我们正在开发一个基于 keycloak 5 0 0 的解决方案 我们的客户可以在我们这里创建他们的帐户并管理他们自己的用户 并且仅管理他们的用户 最初我们认为我们可以使用领域来实现这一点 每个客户都有自己的领域 经过初步测试后 我们认为这可
  • Python脚本通过FTP上传文件

    我想编写一个脚本来将文件上传到 FTP 登录系统如何工作 我正在寻找这样的东西 ftp login mylogin ftp pass mypass 以及任何其他登录凭据 Use ftplib 你可以这样写 import ftplib ses
  • 从 gitignore 过滤文件和路径

    我想找到所有文件路径not使用 C 通过 gitignore 或子目录中任何嵌套的 gitignore 文件 进行过滤 这类似于在这里提问关于PHP 我想知道是否有人知道这段代码是否已在网上某处提供 以 C 形式 更新 为了回答我想要这个的
  • 在 SQL 中选择不同的值对

    我有一个 Access 2010 数据库 其中存储源计算机和目标计算机的 IP 地址 如果我的数据库中有以下条目 source destination A B B A A B C D D D 是否有任何查询来选择唯一对 也就是说 查询的输出
  • 在 python 中捕获 Ctrl+C / SIGINT 并优雅地退出多进程[重复]

    这个问题在这里已经有答案了 How do I catch a Ctrl C in multiprocess python program and exit all processes gracefully I need the soluti
  • 如何阻止 Symfony 记录 Doctrine 的 sql 查询?

    我有一个奇怪的问题 当我检查我的app log dev log我可以在我的页面中看到几乎所有的查询dev log正在实时登录 2015 01 27 06 57 22 doctrine DEBUG SELECT t0 username A 2
  • 简单地将 JavaScript 中的 GET 请求获取到 Flask 服务器

    我正在尝试将一些 json 数据从 Flask 服务器显示到我的 html 页面 但我有一个TypeError NetworkError when attempting to fetch resource with a Promise
  • jQuery 从 url 生成面包屑?

    有没有办法让 jQuery 从 url 在页面上生成面包屑 因此 如果网站网址为 mysite com sec1 sec2 page 面包屑会是这样的 首页 gt 第一节 gt 第二节 gt 页码 Thanks 这将创建一个可用于生成面包屑
  • 在共享元素活动转换中对嵌套视图进行动画处理时出现故障?

    我一直在摆弄 Android 5 0 中的新 API 并一直在尝试弄清楚是否可以同时为ViewGroup及其子元素之一在一次操作期间分别作为共享元素活动转换 下面的屏幕截图给出了我想要实现的目标的简化示例 在第一个活动中 深灰色框是View