J'ai quelques AsyncTask
qui charge un flux vidéo dans le lecteur, donc je veux montrer un écran de chargement pendant qu'il fonctionne. À l'heure actuelle mon code onCreate
ressemble à ceci:VideoView joue bien, mais pas visible lors de l'échange de vues plein écran
final View loadingView = getLayoutInflater().inflate(R.layout.video_loading, null);
final View playerView = getLayoutInflater().inflate(R.layout.player, null);
final VideoView videoView = (VideoView) playerView.findViewById(R.id.canvas);
Log.d(TAG, "Running video player for video " + videoId);
new VideoPlayingTask(this, videoView.getHolder()) {
protected void onPreExecute() {
setContentView(loadingView);
super.onPreExecute(); // it creates or re-uses (resetting it before)
// MediaPlayer instance inside and sets display using setDisplay to the passed holder
};
protected void onPostExecute(FileInputStream dataSource) {
setContentView(playerView);
videoView.requestFocus();
super.onPostExecute(dataSource); // it sets data source,
// prepares player and starts it
};
}.execute(videoId);
loadingView
est affiché correctement, lorsque le contenu changeant playerView
, l'écran devient noir, mais le son joue bien en arrière-plan.
je reçois ces deux avertissements de MediaPlayer dans les journaux:
info/warning (1, 35)
info/warning (1, 44)
J'ai essayé d'utiliser ViewSwither
et d'appeler à l'intérieur showNextView
onPostExecute
, mais le comportement est similaire, écran noir lors du changement de videoView
.
J'ai essayé le chemin avec deux mises en page intérieures couché à l'intérieur du courant et changer leur visibilité manuellement, et cela n'a pas aidé à moi.
Lorsque j'utilise seulement VideoView
dans cette activité, cela fonctionne parfaitement et montre à la fois l'image et le son.
video_loading.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ProgressBar android:layout_width="@dimen/small_progress_side"
android:layout_height="@dimen/small_progress_side" />
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/caching_video" />
</LinearLayout>
player.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<VideoView android:id="@+id/canvas"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
this question semble un peu similaire, mais le passage à la visibilité loadingView
INVISIBLE
ne fonctionne pas dans mon cas.