2011-12-06 10 views
5

Czy jest jakiś sposób sprawdzenia, czy wyświetlany widok jest wyświetlany na ViewFlipper podczas odwracania? Mam ten problem: mój ViewFlipper zawiera kilka obrazów i jeden film. Chcę, aby gdy viewflipper wyświetlił Videoview z wideo, ViewFlipper, aby zatrzymać przewijanie i Video, aby rozpocząć odtwarzanie. Działa to tylko wtedy, gdy wideo jest wyświetlane po raz pierwszy. Następnie wideo jest wyświetlane jako obraz i nie wiem, jak uchwycić moment, kiedy wideo jest wyświetlane. Czy ktoś może mi pomóc, proszę?Uzyskaj bieżący widok obiektu ViewFlipper podczas odwracania

Oto jak zapełnić 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; 
     } 
    } 

i onCreate() metoda mam to:

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(); 
} 

(nazywam zapełnić() metody tylko raz po raz, może to jest problem)

Każdy pomysł jest mile widziany. Z góry dziękuję.

Odpowiedz

7

Nie jestem pewien, czy to zadziała, ale warto spróbować.

Dodaj detektor animacji do obiektu animacji ustawionego jako animacja "podglądu" viewflippera. Overide metodę słuchaczy onAnimationEnd, a wewnątrz tej kontroli metodą

vf.getDisplayedChild(); 

Powyższy kod daje indeks aktualnie wyświetlanego dziecka. Jeśli więc znajduje się w widoku wideo, możesz przestać przewijać i odtwarzać wideo.

+0

Dziękuję za pomysł. Pomaga mi rozwiązać mój problem :) – Gabrielle

Powiązane problemy