2017-09-06 1 views
0

J'ai Activity qui contient ViewPager qui implémente FragmentPagerAdapter avec 3 fragments et j'ai implémenté la caméra dans l'un des fragments en utilisant SurfaceView. Ainsi, lorsque les utilisateurs balaient vers la gauche à partir de mon fragment de la maison, il est capable d'utiliser la caméra (comme dans WhatsApp). Le problème est lors du démarrage de l'application (où je reçois des données sur Internet et mis en listview) ou parfois à gauche ou à droite Caméra apparaît dans le fragment principal ou à la maison pendant une seconde ou moins, puis disparaît et le fragment de la maison est présenté être.Problème avec la caméra dans le fragment

Voici le problème lors du téléchargement de données, la caméra occupe le fragment de la maison jusqu'à ce que les données soient chargées. Et pour l'instant qui est une seconde ou moins: https://i.stack.imgur.com/wsEUy.jpg

Et voilà comment fragment de la maison ressemble réellement après le téléchargement de données: https://i.stack.imgur.com/AUv3V.png

J'ai essayé avec l'ajout contenant la couleur à ma maison Fragment de fond xml mais cela n'a pas fonctionné.

J'ai suivi cet exemple pour mettre en œuvre camer dans le fragment: https://github.com/rexstjohn/UltimateAndroidCameraGuide/blob/master/camera/src/main/java/com/ultimate/camera/fragments/NativeCameraFragment.java

peut-elle aider quelqu'un ou donner quelques suggestions ce qui se passe et ce qu'il faut faire? Merci

+1

Un extrait de code serait plus utile. –

+0

Pouvez-vous expliquer plus à ce sujet .. je ne comprends pas ce que vous voulez. – Sunil

+0

Merci pour votre réponse. J'ai ajouté 2 images et une description. – Yupi

Répondre

0

J'ai trouvé une solution qui correspond à mes besoins. Donc, ici, il est si quelqu'un à l'avenir coincé avec le même problème. D'une certaine façon le problème était quand j'ai ajouté mon CamerPreview à View dans mon cas c'était FrameLayout et c'était dans OnCreateView de CameraFragment. Même si j'essaie de démarrer l'aperçu de la caméra lorsque CameraFragment est visible pour l'utilisateur et arrêter l'aperçu quand il n'est pas visible qui n'a pas aidé, je recevais toujours flash sur le fragment de la maison par aperçu de la caméra lors du déplacement vers la gauche ou la droite.

Je Créer un nouveau fragment qui est comme espace réservé et je l'ai ajouté à FragmentPagerAdapter puis il y avait une option pour créer mon CameraFragment utilise FragmentTransaction quand mon fragment d'espace réservé est visible à l'utilisateur (qui fonctionne aussi) mais j'utilisé ViewPager détecter quand l'utilisateur commence à basculer vers la gauche puis FragmentTransaction commence à remplacer mon fragment de placeholder avec actuall CameraFragment.

transaction est pas tout à fait somooth comme par exemple dans WhatsApp (Si quelqu'un sait comment ils l'avaient fait et veut partager, ce serait génial) mais il fonctionne sans problème et sans clignotant sur fragment de la maison.

Bien sûr, si quelqu'un a une idée et comment améliorer une solution ou une autre solution, n'hésitez pas à la partager.

+0

Et si vous utilisez l'API Camera obsolète, assurez-vous d'ouvrir la caméra dans un thread Handler séparé (de sorte que Camera.open() et les callbacks ne provoquent pas d'encombrement sur le thread UI). –

+0

@AlexCohn merci J'ai trouvé votre explication comment ouvrir caméra en utilisant 'HandlerThread' voter pour cela. Et maintenant, c'est plus fluide, même si je pense que FragmentTransaction n'affiche que peu d'interface utilisateur. – Yupi

+0

En fait, WhatsApp triche sur le fragment de la caméra. Lorsque vous changez de gauche/droite, l'aperçu ne bouge pas; il est seulement révélé plus ou moins. Cela suggère (je n'ai pas essayé d'inverser leur disposition, bien que cela soit possible) que la surface de prévisualisation soit toujours prête sous les autres couches, et qu'il ne reste plus qu'à allumer ou éteindre la caméra à temps. Je crois que c'est une approche plus robuste que de mettre la surface d'aperçu dans un fragment à l'intérieur d'un ViewPager. Certains périphériques peuvent ne pas être satisfaits de la surface de prévisualisation de la caméra qui est partiellement hors de l'écran. –