2010-09-24 1 views
1

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 showNextViewonPostExecute, 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é loadingViewINVISIBLE ne fonctionne pas dans mon cas.

Répondre

0

Je viens d'utiliser ProgressDialog.show() au lieu de renverser des vues, c'est beaucoup plus simple et le gère correctement.