与英雄元素的场景转换抛出层超过最大值。 GPU支持的尺寸

我正在尝试在Android 5.0中将ListView中的图像转换为详细信息页面。 但是,大约有50%的Android图像崩溃,下面的例外。 我的图片是600×400,但我试图将其更改为200×100,但得到了相同的错误。 当它的工作,它看起来不错,但我看不出各种图像之间的差异。 真的不确定为什么它声称图层太大,有人有线索?

private void handleNewsItemClicked(AdapterView<?> arg0, View viewClicked, int arg2) { TopNewsItem item = ((TopNewsItem)arg0.getAdapter().getItem(arg2)); Intent intent = new Intent(getActivity(), TopNewsDetailsActivity.class); intent.putExtra(TopNewsDetailsActivity.ARGS_ID, item.getGuid().getId()); intent.putExtra(TopNewsDetailsActivity.ARGS_IMAGE, imageUrl); if(Build.VERSION.SDK_INT >= 21) { ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(this.getActivity(), viewClicked.findViewById(R.id.image), "article_image"); this.getActivity().startActivity(intent, options.toBundle()); }else getActivity().startActivity(intent); } } W/OpenGLRenderer(18137): Layer exceeds max. dimensions supported by the GPU (1080x4628, max=4096x4096) D/AndroidRuntime(18137): Shutting down VM V/GAV3 (18137): Thread[main,5,main]: Tracking Exception: IllegalStateException (@MessageQueue:nativePollOnce:-2) {main} /AndroidRuntime(18137): FATAL EXCEPTION: main E/AndroidRuntime(18137): Process: myapp.app, PID: 18137 E/AndroidRuntime(18137): java.lang.IllegalStateException: Unable to create layer for RelativeLayout E/AndroidRuntime(18137): at android.os.MessageQueue.nativePollOnce(Native Method) E/AndroidRuntime(18137): at android.os.MessageQueue.next(MessageQueue.java:143) E/AndroidRuntime(18137): at android.os.Looper.loop(Looper.java:122) E/AndroidRuntime(18137): at android.app.ActivityThread.main(ActivityThread.java:5221) E/AndroidRuntime(18137): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(18137): at java.lang.reflect.Method.invoke(Method.java:372) E/AndroidRuntime(18137): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) E/AndroidRuntime(18137): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Related of "与英雄元素的场景转换抛出层超过最大值。 GPU支持的尺寸"

当视图确实有“hasOverlappingRendering()”返回true时,Fade转换将使用硬件层。 这是为了performance。 你必须有许多观点全部淡出。

你有几个选项。 一个是你的意见有hasOverlappingRendering返回false。 这在所有情况下都是不可能的,但这可能足以解决您的问题。 请记住,这意味着包含的意见不应该重叠!

其次是单独转换较less的视图。 你可以通过在ViewGroups上设置android:transitionGroup =“true”来完成这个工作。 例如,如果您有一个没有背景的ListView,您将最终分别转换每个元素。 相反,您可以将ListView的transitionGroup属性设置为true,然后它们将一起转换。

– 更新 –

您遇到的问题是,传入的视图渐渐消失太大。 我在启动活动中尝试了以下视图:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="clicked" > <TextView android:id="@+id/hello_world" android:transitionName="hello" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> 

是的,来自android的hello world基本应用程序,给文本一个id和transitionName。 onClick处理程序只是启动第二个活动,将Hello World视图作为共享元素传递。 第二个Activity有一个非常大的TextView,类似于你的:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:transitionGroup="true" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/hello_world" android:transitionName="hello" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="@string/hello_world" /> <TextView android:layout_below="@+id/hello_world" android:text="Lorem ipsum.... I didn't copy all of my text" android:textSize="30sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </ScrollView> 

将ScrollView的transitionGroup从false(默认值)切换到true使其工作,因为ScrollView正在被淡入。ScrollView具有最大尺寸,而其内容可能是巨大的。

此问题的根本原因在您的日志中显示:

W/OpenGLRenderer(18137): Layer exceeds max. dimensions supported by the GPU (1080x4628, max=4096x4096) W/OpenGLRenderer(18137): Layer exceeds max. dimensions supported by the GPU (1080x4628, max=4096x4096)

你的目标活动的高度是4628,大于GPU所支持的最大值 – 4096。

在另一个答案中已经提到的解决scheme是创build一个更短的目标活动。 类似的问题和答案在这里: 崩溃 – 材料devise的android 5.0

你可以避免它,如果淡出过渡不是必须的:详细信息请参阅: https : //stackoverflow.com/a/45030173/4334399