方向改变后转换闪烁

问题描述 投票:7回答:3

UPDATE

我用Google qazxsw poi打开了一个错误

我试图在我当前的Android应用程序中使用https://issuetracker.google.com/issues/63663775

我有一个来源makeSceneTransitionAnimation,其中包含Activity,而片段内则是Fragment

当我点击RecyclerView中的图像时,我转换到我的目标RecyclerView,其中包含一个片段,该片段正确显示带有可接受动画的图像。

按后退按钮可正确反转动画。

以上在纵向和横向都可以正常工作。

当我在查看目标片段时更改方向然后按后退按钮时,会出现BLINKING问题。

还有其他问题,例如图像不会直接返回到其原始位置,而在较旧的设备上,我看到水平线像来自严重调谐的模拟电视的干扰。

它的BLINKING非常糟糕,设备屏幕完全黑色约500ms。

我已下载并部署了Google示例共享元素转换应用,它似乎具有相同的“功能”。

我尝试了多种解决方案,但没有一种方法有效,例如Activity

this展示了这个问题。

添加了LOGCAT

Here's
android animation android-animation android-transitions shared-element-transition
3个回答
4
投票

问题在于:您正在以纵向模式启动07-21 12:57:18.097 1962-1967/com.incentive.yellowpages I/zygote64: Do partial code cache collection, code=30KB, data=21KB 07-21 12:57:18.099 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=30KB, data=23KB 07-21 12:57:18.099 1962-1967/com.incentive.yellowpages I/zygote64: Increasing code cache capacity to 128KB 07-21 12:57:20.540 1962-2058/com.incentive.yellowpages D/OkHttp: --> GET http://www.spyur.am/en/home/search-1/?company_name=Happy http/1.1 07-21 12:57:20.688 1962-1967/com.incentive.yellowpages I/zygote64: Do partial code cache collection, code=61KB, data=55KB 07-21 12:57:20.688 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=61KB, data=55KB 07-21 12:57:20.688 1962-1967/com.incentive.yellowpages I/zygote64: Increasing code cache capacity to 256KB 07-21 12:57:21.084 1962-2058/com.incentive.yellowpages D/OkHttp: <-- 200 OK http://www.spyur.am/en/home/search-1/?company_name=Happy (543ms, unknown-length body) 07-21 12:57:22.197 1962-1967/com.incentive.yellowpages I/zygote64: Do full code cache collection, code=124KB, data=93KB 07-21 12:57:22.197 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=98KB, data=59KB 07-21 12:57:22.377 1962-1967/com.incentive.yellowpages I/zygote64: Do partial code cache collection, code=101KB, data=79KB 07-21 12:57:22.378 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=101KB, data=79KB 07-21 12:57:22.378 1962-1967/com.incentive.yellowpages I/zygote64: Increasing code cache capacity to 512KB 07-21 12:57:22.378 1962-1967/com.incentive.yellowpages I/zygote64: Compiler allocated 4MB to compile boolean org.jsoup.parser.HtmlTreeBuilderState$7.process(org.jsoup.parser.Token, org.jsoup.parser.HtmlTreeBuilder) 07-21 12:57:22.701 1962-1967/com.incentive.yellowpages I/zygote64: Compiler allocated 4MB to compile void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int) 07-21 12:57:24.495 1962-1967/com.incentive.yellowpages I/zygote64: Do full code cache collection, code=245KB, data=178KB 07-21 12:57:24.495 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=216KB, data=130KB 07-21 12:57:25.040 1962-2058/com.incentive.yellowpages D/OkHttp: --> GET http://www.spyur.am/en/companies/happy-print-printing-house/34896 http/1.1 07-21 12:57:25.101 1962-1962/com.incentive.yellowpages D/ViewRootImpl[DetailActivity]: changeCanvasOpacity: opaque=true 07-21 12:57:25.437 1962-2058/com.incentive.yellowpages D/OkHttp: <-- 200 OK http://www.spyur.am/en/companies/happy-print-printing-house/34896 (396ms, unknown-length body) 07-21 12:57:26.111 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 0 07-21 12:57:26.123 1962-1967/com.incentive.yellowpages I/zygote64: Do partial code cache collection, code=251KB, data=168KB 07-21 12:57:26.124 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=249KB, data=168KB 07-21 12:57:26.124 1962-1967/com.incentive.yellowpages I/zygote64: Increasing code cache capacity to 1024KB 07-21 12:57:26.173 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 1 07-21 12:57:26.177 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 2 07-21 12:57:26.186 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 3 07-21 12:57:26.226 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 4 07-21 12:57:26.232 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 5 07-21 12:57:26.238 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 6 07-21 12:57:26.244 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 7 07-21 12:57:26.265 1962-1967/com.incentive.yellowpages I/zygote64: Compiler allocated 8MB to compile void android.widget.TextView.<init>(android.content.Context, android.util.AttributeSet, int, int) 07-21 12:57:26.437 1962-1962/com.incentive.yellowpages D/ViewRootImpl[DetailActivity]: changeCanvasOpacity: opaque=false 07-21 12:57:26.579 1962-1967/com.incentive.yellowpages I/zygote64: Compiler allocated 6MB to compile void android.view.ViewRootImpl.performTraversals() 07-21 12:57:27.754 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 0 07-21 12:57:27.761 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 1 07-21 12:57:27.765 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 2 07-21 12:57:27.772 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 3 07-21 12:57:27.784 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 4 07-21 12:57:27.788 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 5 07-21 12:57:27.792 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 6 07-21 12:57:27.796 1962-1962/com.incentive.yellowpages I/DetailsAdapter: vvv: 7 07-21 12:57:29.889 1962-1962/com.incentive.yellowpages D/ViewRootImpl[DetailActivity]: changeCanvasOpacity: opaque=false 07-21 12:57:30.117 1962-1962/com.incentive.yellowpages D/ViewRootImpl[DetailActivity]: changeCanvasOpacity: opaque=false 07-21 12:57:30.756 1962-1962/com.incentive.yellowpages W/AutofillManager: Session 409360048 could not be restored 07-21 12:57:30.922 1962-1967/com.incentive.yellowpages I/zygote64: Do full code cache collection, code=498KB, data=362KB 07-21 12:57:30.923 1962-1967/com.incentive.yellowpages I/zygote64: After code cache collection, code=445KB, data=262KB 并以横向模式返回Activity2。但是因为你已经进行了方向改变,所以Activity1的视图层次结构被破坏并被创建,因此没有更多的Activity1最初从转换开始。

您可以做的是使用View API将视图从旧视图重新映射到新视图。虽然有一些工作要做,但我已经在我的Activity#setExitSharedElementCallback()答案中逐步描述了这一点。

最好的选择是用你需要的功能结账thisAlex Lockwood,你会更容易理解如何处理这种情况。

app at github

基本上,您正在清除地图并向其添加新的“转换名称 - 视图”对。你可以看到@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setExitSharedElementCallback(new SharedElementCallback() { @Override public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { if (we are coming back to Activity1) { View newSharedElement = findViewById(R.id.your_imageview); if (newSharedElement != null) { names.clear(); names.add("transition name"); sharedElements.clear(); sharedElements.put("transition name", newSharedElement); } } else { // we are leaving Activity1 } } }); } 检查如何完成if (we are coming back to Activity1)


这是在here中实现的功能。

one of my apps


2
投票

我认为问题在于ImageView布局边界,因为场景转换计算起始位置和结束位置之间的差异然后设置差异动画,但是这里由于方向改变而改变了结束位置,你能否尝试重新创建结束布局在方向改变的情况下,背压可能是我错了但只能想到这种情况,你能提供相同的代码吗?(这太大了,不能添加为评论所以必须添加作为答案。)


1
投票

这似乎只发生在奥利奥上。它可以使用Google的示例项目在API 26仿真器上重现:enter image description here

我设法通过添加以下内容来修复我的应用中的问题:

https://github.com/googlesamples/android-ActivitySceneTransitionBasic/#readme

以我的细节活动的风格。

© www.soinside.com 2019 - 2024. All rights reserved.