Scène de transition avec les héros des éléments de lance de la Couche dépasse max. dimensions prises en charge par le GPU
Je suis en train de faire un héros de transition dans Android 5.0 entre une image dans une liste à une page de détails. Mais pour environ 50% de mes images Android se bloque à l'exception ci-dessous. Mes images sont 600x400 mais j'ai essayé de les changer 200x100 mais j'ai reçu le même message d'erreur. Lorsqu'elle fonctionne, elle a l'air super mais je ne vois pas la différence entre les différentes images. Vraiment pas sûr pourquoi il prétend que la couche est trop gros, quelqu'un a un idée?
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)
- Pour info je l'ai signalé cela comme un bug sur Android: code.google.com/p/android/issues/...
Vous devez vous connecter pour publier un commentaire.
Le Fondu de transition sera d'utiliser des couches de matériel lors de votre point de vue n'a "hasOverlappingRendering()" retourne true. Cela a été fait pour la performance. Vous devez avoir beaucoup de vues sur toute la décoloration séparément.
Vous avez deux options. L'un est pour avoir votre avis pour avoir hasOverlappingRendering retourne la valeur false. Cela peut ne pas être possible dans tous les cas, mais il peut être suffisant pour résoudre votre problème. Rappelez-vous que cela signifie que le contenu de points de vue ne doivent pas se chevaucher!
La deuxième est de faire la transition avec moins de vues séparément. Vous pouvez le faire en mettant android:transitionGroup="true" sur ViewGroups qui doivent être fondus ensemble. Par exemple, si vous avez un ListView avec pas de fond, vous aurez la transition de chaque élément séparément. Au lieu de cela, vous pouvez définir la liste de transitionGroup propriété sur true, puis ils passerons ensemble.
-- update --
Le problème vous êtes à la rencontre, c'est que les entrants points de Vue qui sont en fondu sont trop grandes. J'ai essayé le point de Vue suivant le lancement de l'Activité:
Oui, bonjour le monde d'application de base d'android, donnant un id et transitionName pour le texte. Le gestionnaire onClick seulement lance la deuxième Activité, en passant le bonjour tout le monde considère comme un élément commun. La deuxième Activité a un très grand TextView, semblable à la vôtre:
De commutation de la ScrollView de transitionGroup de faux (valeur par défaut) à true permet de travailler parce que la ScrollView est décoloré. La ScrollView a une taille maximale, alors que son contenu peut être énorme.
transitionGroup
correctifs pour moi! Merci!!!!La cause de ce problème est indiqué dans votre journal sur cette ligne:
W/OpenGLRenderer(18137): Layer exceeds max. dimensions supported by the GPU (1080x4628, max=4096x4096)
.Votre activité cible a une hauteur de 4628 qui est plus grand que le maximum pris en charge par le GPU - 4096.
La solution, déjà mentionné dans la réponse à faire, est de créer une cible de l'activité qui est la plus courte. La même question et la réponse ici: crash - material design d'android 5.0
Vous pouvez simplement l'éviter si le fondu de transition n'est pas un:
voir ici pour les détails: https://stackoverflow.com/a/45030173/4334399