VideoView flash noir avant et après avoir joué
J'ai un VideoView que je veux utiliser pour lire un movieclip. Je l'utilise comme ça à jouer et il fonctionne.
VideoView vv = new VideoView(this);
vv.setVideoURI(Uri.parse("android.resource://cortex2.hcbj/raw/intro"));
setContentView(vv);
vv.start();
Cependant je vois un éclair noir juste avant et après le clip. Le flash en lui-même n'est pas un gros problème, mais la noirceur de la il est. Le fond est blanc, donc si le flash est blanc, ou si elle disparaît, il va être correct.
source d'informationauteur vincentkriek
Vous devez vous connecter pour publier un commentaire.
Aujourd'hui, j'ai eu le même problème et a trouvé une très mauvaise et hacky solution de contournement pour ce méchant problème: j'ai réalisé que l'on peut définir une couleur d'arrière-plan /drawable sur le
VideoView
qui se fond sur la vidéo à la surface et la rend complètement caché. Cela ne fonctionne que si bien que la vidéo sous-jacente est toujours jouerpas quand il est arrêté (ni quand il a fini normalement, ni quandstopPlayback()
a été appelé), sinon vous auriez voir un noir de scintillement. Le fond ne doit pas être mis dans le début, sinon la vidéo serait complètement caché dès le début.Donc l'étape logique pour moi est de poster un retard de l'événement juste avant que je commence la vidéo - et depuis que je sais que la longueur de la vidéo, je laisse cet événement se produire seulement quelques millisecondes avant que ça se termine normalement. J'ai pris une capture d'écran de la dernière image dans VLC, puis mélangé comme ceci:
Cependant ce n'était pas assez, parce que quand la vidéo fait fini, j'ai encore un short noir le scintillement de l'écran, donc j'ai également eu à définir l'image comme fond du récipient qui contenait la vidéo (dans mon cas, c'était la présentation de l'activité):
Cette activité est rendu en plein écran et la vidéo est (principalement) en fonction de la taille totale de l'écran (écran de 1024 x 600, vidéo 960x640). Je dis surtoutparce que, pour une raison inconnue, la mise en page de l'image d'arrière-plan par le biais de mélanges pour environ 10px sur le dessus. Ce fut le dernier hack, j'ai eu à appliquer pour le faire fonctionner - pour déplacer le conteneur vidéo
-10dip
dans le vide sur le dessus.Maintenant cela semble impressionnant sur ma Galaxy Tab, je n'ose pas tester sur le SGS2 téléphone, mais...
J'ai fini par avoir à faire quelque chose de très similaire à @tommyd pour éviter le black surfaceView flash au début et à la fin de mes vidéos. Cependant, j'ai trouvé que le paramètre de configuration/invalide l'arrière-plan dessiné pour la videoView a ne se produisent pas instantanément sur de nombreux téléphones. Il pourrait y avoir environ une demi-seconde de retard entre mon appel pour définir l'arrière-plan, et lorsqu'il était réellement affiché.
Ce que j'ai fait était de créer une SurfaceView qui a montré une couleur unie, puis superpose la ce sur le dessus de la VideoView et fait usage de SurfaceView.setZOrderMediaOverlay().
Mon custom SurfaceView a été en grande partie déterminés par:
http://android-er.blogspot.com/2010/05/android-surfaceview.html
Et dans l'activité parent qui héberge les points de vue:
Ensuite, vous pouvez faire des choses comme
mVideoMask.setVisibility(View.GONE)
pour masquer le masque oumVideoMask.setVisibility(View.VISIBLE)
pour afficher le masque (et cacher le noir sérigraphié VideoView).Dans mes expériences sur divers téléphones, cette méthode a donné de très rapide affichage/masquage de la vidéo masque, par opposition à définir/invalide l'arrière-plan.
j'ai eu le même problème et blanc au lieu de noir est ok pour moi.. j'ai essayé toutes les solutions ci-dessus, je suis venu avec la suite de
et retard de ma vidéo 400 ms du début du fondu de blanc fonctionne comme un charme pour moi
Ma solution de contournement pour ce diabolique bug utilisé une Vue vierge avec la couleur de fond de son choix sur le dessus de la VideoView.
ensuite dans mon code je l'ai fait:
Que se débarrasser de début noir flash pour moi. Puis pour la fin de noir flash, je l'ai fait:
Si ça peut aider, s'il vous plaît voter cette réponse.
ici est simple astuce
vérifier l'état media player.getCurrentPosition == 0 sur préparés auditeur de vue vidéo ,un écran noir apparaît lorsque la position est égale à zéro, afin d'afficher une image jusqu'à ce que la vidéo se charge
mycode:
Que flash vient de modifier le contenu de la vue à un autre. Vous pourriez essayer d'ajouter un VideoView à votre disposition fichier xml puis de référencement avec
(VideoView) findViewById(R.id.vid);
au lieu denew VideoView(this);
et réglage de l'affichage du contenu de cette mise en page.Pourquoi ne pas utiliser le Style et les Thèmes
Pouvez-vous essayer ? Cela peut aider à
colors.xml
styles.xml
Pour définir un thème pour toutes les activités de votre application, ouvrez le AndroidManifest.xml fichier et modifier la balise inclure le android:thème de l'attribut avec le nom du style.
Où en êtes-vous de changer la contentView (dans la méthode avez-vous d'écrire les quatre lignes de code ci-dessus)?
Vous ne devriez mettre la contentView dans le
onCreate()
méthode d'unActivity
. Si vous le faites ailleurs (par exemple dans un bouton de rappel de), vous devez démarrer une nouvelle activité à la place.Il y a une alternative que vous êtes à utiliser les médias contrôleur pour cette. Voici un exemple de code
De l'essayer.
Une autre solution qui pourrait fonctionner pour les gens qui sont à la recherche pour cette question:
Dans mon cas, la vidéo a été une ressource dans l'application (qui est, je savais tout sur elle, et elle n'allait pas changer) et son dernier 500 ms ont la même image, alors j'ai fini par faire ce qui suit:
et référencé dans la classe est:
Explication: Immédiatement après le démarrage de la vidéo, j'ai créer un Exécutable et postDelayed à la vue de la racine (
android.R.id.content
) pour la durée de la vidéo, moins la longueur à laquelle je suis prêt à mettre la vidéo en pause (et un généreux tampon, car postDelayed n'est pas garanti pour jouer exactement après l'heure demandée)Ensuite, l'exécutable vérifie si la vidéo est arrivé à sa pause-temps, si celui-ci s'arrête et le fait que ce soit d'autre que nous voulons faire. Si ça ne marche pas, il court postDelayed de nouveau avec lui-même, pour un temps réduit (100 ms dans mon cas, mais elle peut être plus courte)
Accordée, ce qui est loin d'être une solution idéale, mais il pourrait aider quelqu'un avec un problème spécifique, similaire à celui qui a trébuché moi pour une demi-journée 🙂
Je sais que c'est une vieille question, mais si vous pouvez ajouter un peu de code pour MediaPlayer auditeurs il est très simple de répondre. Il s'est avéré que setBackgroundColor pour VideoView change la couleur de premier plan ( https://groups.google.com/forum/?fromgroups=#!topic/android-développeurs/B8CEC64qYhQ ).
La seule chose que vous avez à faire est de basculer entre setBackgroundColor(Color.BLANC) et setBackgroundColor(Color.TRANSPARENT).
Ma variation sur le @tommyd thème:
Définir le drawable statique de l'image vidéo, puis spam, le message de la file d'attente. Après un certain temps, désactivez la drawable donc des images vidéo de rendu. Puis, avant la fin, définir l'image statique du dos.
J'ai eu le même problème que cela a fonctionné pour moi ..
Quand vous voulez afficher la vidéo en faire videoView.setZOrderOnTop(false); et quand vous voulez masquer l'affichage de la vidéo juste faire videoView.setZOrderOnTop(true);
Essayer cette ligne.Cela a fonctionné pour moi. if(joueur!=null)le joueur.release();