Получить текущий вид ViewFlipper, пока он переворачивается - PullRequest
7 голосов
/ 06 декабря 2011

Есть какой-нибудь способ узнать, отображается ли представление на ViewFlipper, когда оно переворачивается?У меня есть эта проблема: мой ViewFlipper содержит несколько изображений и одно видео.Я хочу, чтобы когда видоискатель отображал Videoview с видео, ViewFlipper, чтобы остановить переворачивание, и видео, чтобы начать воспроизведение.Это работает только тогда, когда видео отображается впервые.После этого видео отображается в виде изображения, и я не знаю, как поймать момент, когда видео отображается.Кто-нибудь может мне помочь, пожалуйста?

Вот как я заполняю 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;
        }
    }

и по методу onCreate () у меня есть это:

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

(Iвызывайте метод populate () только один раз, может быть, в этом проблема)

Любая идея приветствуется.Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 06 декабря 2011

Я не уверен, что это сработает, но стоит попробовать.

Добавьте слушателя анимации к объекту анимации, который вы задали как анимацию 'IN' видоискателя. Перекрываем слушателей по методу onAnimationEnd и внутри этого метода проверяем

vf.getDisplayedChild();

Приведенный выше код даст индекс текущего отображаемого дочернего элемента. Так что, если он есть в видеовиде, вы можете перестать переключать и воспроизводить видео.

2 голосов
/ 18 февраля 2015

Существует также метод ViewFlipper.getCurrentView(), который напрямую возвращает текущее представление.

...