2011-12-06 3 views
5

C'è un modo per sapere che la vista desiderata è visualizzata su ViewFlipper mentre sta girando? Ho questo problema: il mio ViewFlipper contiene alcune immagini e un video. Voglio che quando viewflipper visualizzi Videoview con video, ViewFlipper interrompa il flipping e Video inizi a giocare. Funziona solo quando il video viene visualizzato per la prima volta. Successivamente, il video viene visualizzato come un'immagine e non so come cogliere il momento in cui viene visualizzato il video. Qualcuno può aiutarmi, piacere?Ottieni la vista corrente di ViewFlipper mentre è in movimento

Ecco come io popolo ViewFlipper:

private void populate() { 
     for (int i = 0; i < jArray.length(); i++) { 
      System.out.println("lungime " + jArray.length()); 
      LinearLayout l = new LinearLayout(this); 
      l.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
        LayoutParams.FILL_PARENT)); 
      l.setBackgroundColor(0x000000); 
      l.setOrientation(LinearLayout.VERTICAL); 
      vf.addView(l); 

      File f = new File(Environment.getExternalStorageDirectory() 
        + "/Images" + "/"); 

      File[] files = f.listFiles(); 

      if (files[i].getName().equals("Video" + idPhotos[i])) { 
       System.out.println("Video to Viewflipper"); 
       System.out.println("Video Path " + files[i].getPath()); 
       myVideoView = new VideoView(this); 
       myVideoView.setVideoPath(files[i].getPath()); 
       myVideoView.requestFocus(); 
       myVideoView.setLayoutParams(new LayoutParams(
         LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
       l.setBackgroundColor(Color.BLACK); 
       myVideoView.setKeepScreenOn(true); 

       myVideoView.setOnPreparedListener(new OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mp) { 
         vf.stopFlipping(); 
        } 

       }); 
       myVideoView.setOnTouchListener(new OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN: { 
          downXValue = event.getX(); 
          break; 
         } 

         case MotionEvent.ACTION_UP: { 
          currentX = event.getX(); 
          if (downXValue == currentX) { 
           Intent intent = new Intent(getBaseContext(), 
             FinActivity.class); 
           intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
           startActivity(intent); 
           finish(); 
          } 
         } 
         } 
         return true; 
        } 

       }); 

       myVideoView 
         .setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
          public void onCompletion(MediaPlayer mp) { 
           vf.startFlipping(); 
          } 
         }); 

       vf.stopFlipping(); 
       myVideoView.start(); 
       myVideoView.setId(i); 
       l.addView(myVideoView); 
       l.setId(i); 
      } 

      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize = 3; 
      options.inPurgeable = true; 

      bitmap = BitmapFactory.decodeFile(files[i].getPath()); 
      img = new ImageView(this); 
      img.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
        LayoutParams.FILL_PARENT)); 

      img.setImageBitmap(bitmap); 
      img.setOnTouchListener(this); 
      l.addView(img); 
      l.setId(i); 
      img = null; 
     } 
    } 

e onCreate() metodo che ho questo:

if (ff.exists() && (files.length == jArray.length())) {  
       populate(); 
       vf.setOutAnimation(AnimationUtils.loadAnimation(
         getBaseContext(), R.anim.push_left_out)); 
       vf.setInAnimation(AnimationUtils.loadAnimation(
         getBaseContext(), R.anim.push_left_in)); 
       vf.startFlipping(); 
} 

(che io chiamo popolare() metodo solo una volta per volta, forse questo è il problema)

Qualsiasi idea è benvenuta. Grazie in anticipo.

risposta

7

Non sono sicuro che funzioni, ma vale la pena provarlo.

Aggiungere un listener di animazione all'oggetto di animazione impostato come animazione "IN" del viewflipper. Overide metodo ascoltatori onAnimationEnd, e dentro quel metodo di controllo

vf.getDisplayedChild(); 

Il codice di cui sopra darà indice del bambino attualmente visualizzata. Quindi se è nella videoview, puoi smettere di lanciare e riprodurre il video.

+0

Grazie per l'idea. Mi aiuta a risolvere il mio problema :) – Gabrielle