Android 5 上的共享元素活动转换

2024-03-05

我想在从一个活动转到另一个活动时设置共享元素转换。

第一个 Activity 有一个包含项目的 RecyclerView。单击某个项目时,该项目应以动画方式呈现到新活动。

所以我设置了一个 最终活动视图以及回收器视图项目视图上的 android:transitionName="item" 。

我在进行下一个活动时也会使用此代码:

this.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, itemView, "boomrang_item").toBundle());

单击某个项目时,它会正确转换并显示新视图。这真的很好。 但是当我点击后退按钮时。有时它工作正常,但大多数时候我的活动崩溃并显示以下堆栈跟踪:

   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference
            at android.view.GhostView.calculateMatrix(GhostView.java:95)
            at android.app.ActivityTransitionCoordinator$GhostViewListeners.onPreDraw(ActivityTransitionCoordinator.java:845)
            at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1956)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
            at android.view.Choreographer.doCallbacks(Choreographer.java:580)
            at android.view.Choreographer.doFrame(Choreographer.java:550)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

我究竟做错了什么? 看起来像是android 5中的一个错误


我遇到了同样的问题,并注意到,如果返回时原始共享元素在前一个屏幕上不再可见(可能是纵向屏幕上的最后一个元素,但一旦切换到横向,它就不再可见),就会发生崩溃,因此转换无处可放回共享元素。

我的解决方法是如果屏幕在返回之前已旋转,则删除返回过渡(在第二个活动中),但我确信必须有更好的方法来处理此问题:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mOrientationChanged = !mOrientationChanged;
}

@Override
public void supportFinishAfterTransition() {
    if (mOrientationChanged) {
        /**
         * if orientation changed, finishing activity with shared element
         * transition may cause NPE if the original element is not visible in the returned
         * activity due to new orientation, we just finish without transition here
         */
        finish();
    } else {
        super.supportFinishAfterTransition();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 5 上的共享元素活动转换 的相关文章

  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 如何在 Flutter 中对 RaisingButton 的颜色进行动画处理?

    我有一个RaisedButton 我想要animate它的颜色来自green to red 反之亦然 每次用户单击它时 这怎么能做到呢 您可以使用AnimatedContainer https api flutter dev flutter
  • 蓝牙 LE 中步数计数的服务和特性是什么?

    低功耗蓝牙中步数的服务 特征值 UUID 是什么 蓝牙文档的相应页面没有列出任何步骤 如何计算步数 计步设备是否使用跑步速度和步频服务 谢谢 有些设备确实使用跑步速度和节奏服务 您应该能够通过将 总距离 除以 瞬时步长 两者都可以在RSC测
  • 从 Ruby 运行 shell 命令:在显示输出时捕获输出?

    我有个问题 我想从另一个 ruby 脚本运行一个 ruby 脚本并捕获它的输出信息 同时让它也输出到屏幕上 runner usr bin env ruby print Enter your password password gets ch
  • 用于将用户发送至设备应用商店上的应用评论页面的 URL

    为了将 iTunes App Store 置于最前面并打开它以显示应用程序的评论页面 要启动的 URL 是什么 我想将我的用户发送到 撰写评论 页面 其他一些 SO 答案提供了如下 URL 但它似乎不起作用 itms apps itunes
  • 如何在服务器上获取球衣日志?

    我正在使用球衣进行 REST WS 如何在服务器端启用球衣日志 很长的故事 我收到客户端异常 但我在 tomcat 日志中没有看到任何内容 它甚至没有到达我的方法 由于堆栈跟踪显示 toReturnValue 它确实从服务器获取了一些内容
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun
  • 列表框:添加组合框作为项目?

    是否可以将列表框的每个项目都作为组合框 我需要这个 因为我将列表框设置为可检查 然后我需要让用户从列表中每个元素的不同选项中进行选择 Thanks 如果您不打算分发您的应用程序 那么您还可以查看 TreeView 控件 请参阅此示例 COD
  • 从外部material-ui组件访问主题

    我有一个使用标准深色主题的主题提供商 我希望能够从我自己的自定义组件访问该主题的详细信息 但我不知道如何做到这一点 在下面的例子中 this props theme未定义 ReactDOM render
  • 为什么 as.character() 返回日期列表中的整数?

    我惊讶地发现 R 中出现以下行为 as character c Sys Date gt 1 2018 02 05 as character list Sys Date gt 1 17567 为什么会出现这种情况 也就是说 显然 17567
  • 如何在不显示父活动的情况下将一个全屏对话框片段替换为另一个全屏对话框片段?

    我有一个使用单个自定义 DialogFragment 类的活动 它的外观是数据驱动的 因此不同的调用看起来可能相当不同 它是 全屏 即 setStyle DialogFragment STYLE NO FRAME android R sty
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我
  • Apache Flink - “keyBy”中的异常处理

    由于代码错误或缺乏验证 进入 Flink 作业的数据可能会触发异常 我的目标是提供一致的异常处理方式 我们的团队可以在 Flink 作业中使用这种方式 而不会导致生产中出现任何停机 重启策略似乎不适用于此处 因为 简单的重启无法解决问题 我
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用
  • 如何循环遍历颜色数组以更改按键背景(按下/向下)

    互联网 如果这与其他人没有什么关系 请原谅我 但我会将其留在这里 以防这是一个有效的问题 我正在尝试创建一个文本区域字段 其中用户每次按下键 a z 都会触发背景颜色更改 在数组中列出 我一直在用 JQuery 做这件事 我想我已经很接近了
  • SQL Express 上的 OLAP

    我想知道是否有任何桌面 OLAP 解决方案可以使用 SQL Express 因此不需要 Analysis Services 我的任务是找到一种方法让我们的客户能够制作 临时 报告 但其中绝大多数都是在 Sql Express 上 在以前的工
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • 无框架的 C++ GUI

    据我了解 没有办法让 C GUI 设计器将您的应用程序作为一个独立的可执行文件发布 所有 3rd 方框架都以 dll s 等形式添加依赖项 无论是 MFC Qt WTL wxWidgets GTK 这让我只剩下一种解决方案 使用 Win32
  • 为什么八进制序列 '\0101' 不等于十进制 65?

    考虑这个 C 程序 unsigned char c2 0101 printf c d n c2 c2 我相信输出应该是 A 65但实际输出是1 49 推理 字符常量中以 0 作为前缀 声明为八进制格式 而 101 的八进制值为 65 那么
  • 定时功能

    警告 这有点递归 我回答了这个问题 Python 如何获取列表中最长元素之前的所有元素 https stackoverflow com questions 8740018 pythonhow can i get all the elemen
  • YouTube 分析 API 行为空

    我知道这个问题以前已经被回答过 但我似乎有一个不同的问题 直到几天前 我对 YouTube 的查询从未出现过问题 然而现在 每次我查询任何视频上的数据时 实际视频数据行都会以单个空数组的形式返回 这是我的完整代码 coding utf 8
  • flutter sqlite 事务使用错误警告数据库已被锁定

    我正在开发一个使用 sqlite 和事务的移动应用程序 下面的代码是通过使用sqlite事务保存模型到多个数据库表来从用户那里获取订单信息 Future
  • 如何使用 npm install 和 webpack 来使用 normalize.css?

    我正在将 webpack 与 ReactJS 一起使用 并试图弄清楚如何在 npm 安装后使用 normalize css https necolas github io normalize css https necolas github
  • 如何使用注释将控制器定义为服务?

    这似乎是使用控制器作为服务的最快 最简单的方法 但我仍然缺少一个步骤 因为它不起作用 这是我的代码 控制器 服务 Test TestBundle Controller TestController php use Symfony Bundl
  • Psycopg2execute_values 以文本形式发送所有值

    我在 postgres 中有这张表 CREATE TABLE target a json b integer c text id integer CONSTRAINT id fkey FOREIGN KEY id REFERENCES pu
  • 在 drupal 7 中更改管理员密码

    我正在使用内置的 Drupal 7 用户模块 用户注册 忘记密码电子邮件等等 我忘记了我的管理员密码 我可以访问托管在 1and1 com 上的网站 也可以访问 mysql 是否可以通过 SQL 更改密码或电子邮件地址 以便我可以访问管理页
  • 更改状态时延迟加载 Angular 组件脚本

    这个问题已经占用了最后一天左右的时间 我一直在尝试让我的 AngularJS 应用程序延迟加载每个状态组件的脚本文件 我正在 Angular 中从事一个大型项目 并且index html文件已经变成了100多个
  • 将 Django-taggit 与 django-rest-framework 一起使用,我无法保存我的标签

    我试图弄清楚为什么当我提交表单时 我的标签没有保存在我的数据库中 django rest framework 和 Django taggit 也很新 我想我做错了什么 首先 在使用其余框架创建 API 之前 我使用通用视图 CreateVi
  • Python 中的 Bland-Altman 图

    是否有可能制作一个布兰德 奥特曼情节 http en wikipedia org wiki Bland E2 80 93Altman plot在Python中 我似乎找不到任何相关信息 此类情节的另一个名称是Tukey 均差图 Exampl
  • 有哪些 MATLAB 能做而 R 不能做的事情? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从表单数组的下拉框中获取选定的值

  • 在 Android 中使用 SVG 图像的最简单方法是什么?

    我找到了无数的库 以便在 Android 中使用 SVG 图像 并避免令人沮丧地创建不同的分辨率并为每个分辨率删除文件 当应用程序有很多图标或图像时 这会变得非常烦人 在 Android 中使用 SVG 图像的最简单易用的库的分步过程是什么
  • 如何刷新 socket.gethostbyname 响应的缓存?

    以前有人遇到过这个 更新 DNS 记录后 我对 test somedomain com 进行了挖掘 我得到了 167 69 143 234 但是当我执行 socket gethostbyname test somedomain com 时
  • 使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件:

    我有一个文件paylines txt添加到名为的文件夹内TextFiles它驻留在里面ResourcesXcode 中我的 iOS 项目的文件夹 这是我用来访问该文件的代码 NSString filePath NSBundle mainBu
  • 为什么 str.count('') ≠ (来自 str.count('A') + str.count('B') + ... + str.count('Z'))

    它 对我来说应该 说True如果字符串 短语 中只有元音 否则说False 我不明白为什么它总是会回来False 因为 x gt x 总是返回True 我感谢任何人检查此查询的解决方案 str gt 布尔值 def valid letter
  • 网站管理工具无法与 ASP.NET MVC 一起使用

    我刚刚开始使用 ASP NET MVC 并且正在尝试使用这种新架构进行身份验证 因此 我开始遵循官方网站中的教程 当我尝试通过网站管理工具添加一些用户时 我发现了此错误 您选择的数据存储有问题 这可能是由于 无效的服务器名称或凭据 或者权限
  • Android 5 上的共享元素活动转换

    我想在从一个活动转到另一个活动时设置共享元素转换 第一个 Activity 有一个包含项目的 RecyclerView 单击某个项目时 该项目应以动画方式呈现到新活动 所以我设置了一个 最终活动视图以及回收器视图项目视图上的 android