2011-03-14 3 views
3

Je joue une vidéo en utilisant le lecteur multimédia Android & montrant également une animation sur le dessus de la vidéo en utilisant un autre calque. (Le fichier vidéo est présent sur la carte SD.)Écran noir pendant la lecture vidéo dans Android

L'animation est essentiellement une image recadrée qui est synchronisée avec la vidéo (TranslateAnimation). Chaque fois que je tape sur le bouton pour lire la vidéo, j'éprouve un écran noir momentanément avec l'image recadrée au centre, puis l'animation vidéo commence tous les deux. Je veux éviter cela en chargeant d'abord la vidéo & puis en imposant l'image sur le dessus.

Comment puis-je y parvenir? Ou y a-t-il un meilleur moyen?

suivants sont les extraits de code pertinents:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.videolayer); 
     this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     try{ 
      Intent myint = this.getIntent(); 
      photoPath = myint.getStringExtra("photo_path"); 
      large_bitmap_path = myint.getStringExtra("large_bitmap_path"); 
      bitmap_path = myint.getStringExtra("bitmap_path"); 

      imv1 = (ImageView)findViewById(R.id.imv1);    
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
      bitmap = BitmapFactory.decodeFile(photoPath, options); 
      imv1.setImageBitmap(bitmap); 
      getWindowManager().getDefaultDisplay().getMetrics(dm); 
      videoView = (VideoView) findViewById(R.id.VideoView); 

      File f=new File(Environment.getExternalStorageDirectory(), "videos/"+Videoid[GalleryVideo.galleryVideoCounter]+".m4v"); 
      Uri video = Uri.parse(f.getAbsolutePath());    

      videoView.setVideoURI(video); 
      videoView.setOnPreparedListener(this); 
      videoView.setOnCompletionListener(video_listener); 
      videoView.start();    
      lower = (View)findViewById(R.id.lower); 
      middle = (View)findViewById(R.id.middle); 
      upper = (View)findViewById(R.id.upper); 
      upper.setVisibility(4); 

      ....... 
      RelativeLayout ll = (RelativeLayout) findViewById(R.id.LinearLayout01); 
      ll.setOnTouchListener(video_tap); 
      startTime = System.currentTimeMillis(); 


     } catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

................. 

@Override 
    public void onPrepared(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     videoHeight = videoView.getMeasuredHeight(); 
     videoWidth = videoView.getMeasuredWidth(); 
     displayWidth = getApplicationContext().getResources().getDisplayMetrics().widthPixels; 
     displayHeight = getApplicationContext().getResources().getDisplayMetrics().heightPixels; 
     //video is ready for play, now start animation 
     anim_start = 1; 
     launchAnimation();    
    } 

    private Runnable resumeAnim =new Runnable() { 
     public void run() { 
      launchAnimation(); 
     } 
    }; 

Répondre

0

Vous devez utiliser le fil pour jouer l'image vidéo et de montrer à l'aide gestionnaire ou u pouvez utiliser AsyncTask pour résoudre le problème d'écran noir. J'ai fait face au même problème et me suis débarrassé en utilisant le fil et le gestionnaire.

Questions connexes