Получить текущий вид ViewFlipper во время его переворачивания

Есть ли способ узнать, что вид отображения отображается на ViewFlipper, когда он переворачивается? У меня такая проблема: мой 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();
}

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

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


person Gabrielle    schedule 06.12.2011    source источник


Ответы (2)


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

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

vf.getDisplayedChild();

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

person blessenm    schedule 06.12.2011

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

person William    schedule 18.02.2015