ViewPager tidak memotong VideoView saat menggulir

Saya sedang menulis layar tutorial kecil dalam Aktivitas yang memiliki ViewPager yang memiliki beberapa halaman, salah satunya dapat berupa video yang berjalan dalam loop tak terbatas dan gambar di halaman lainnya.

Masalahnya adalah ketika saya menggulir halaman dengan video yang diputar (atau dijeda), tampilan videonya menonjol keluar dari wadahnya. Saya mencoba mengatur properti klip anak dan padding pada wadah dan ViewPager tetapi tidak berhasil.

Bisakah Anda menunjukkan kepada saya apa yang menyebabkan perilaku ini?

Pengaturan video dilakukan dalam PageAdapter sebagai berikut:

     ![enter image description here][1]TutorialPage tutorialPageItem = tutorialPagesList.get(position);
    // Set tutorialImageDrawable as a compound drawable of the TextView
    Drawable tutorialImageDrawable = tutorialPageItem.getTutorialImageDrawable();
    if (tutorialImageDrawable != null) {
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)imageView.getLayoutParams();
        params.width = LayoutParams.WRAP_CONTENT;
        params.height = LayoutParams.WRAP_CONTENT;
        imageView.setImageDrawable(tutorialImageDrawable);
        videoView.setVisibility(View.INVISIBLE);
    } else {
        try {
            //set the uri of the video to be played
            videoView.setVideoURI(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.up_test_640x640_lite_2));

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }

        videoView.requestFocus();
        videoView.setZOrderMediaOverlay(true);
        //we also set an setOnPreparedListener in order to know when the video file is ready for playback
        videoView.setOnPreparedListener(new OnPreparedListener() {

            private int videoPosition;

            public void onPrepared(MediaPlayer mediaPlayer) {
                // close the progress bar and play the video
                //if we have a position on savedInstanceState, the video playback should start from here
                videoView.seekTo(videoPosition);
                if (videoPosition == 0) {
                    videoView.start();
                } else {
                    //if we come from a resumed activity, video playback will be paused
                    videoView.pause();
                }
            }
        });
        videoView.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                videoView.seekTo(0);
                videoView.start();
            }

        });


        ViewTreeObserver treeObserver = imageView.getViewTreeObserver();
        treeObserver.addOnPreDrawListener(new OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                // TODO Auto-generated method stub
                imageView.getViewTreeObserver().removeOnPreDrawListener(this);
                int width = imageView.getWidth();
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)imageView.getLayoutParams();
                params.height = width;
                imageView.setLayoutParams(params);
                return false;
            }

        });
        imageView.setVisibility(View.INVISIBLE);
    }

masukkan deskripsi gambar di sini


person Ranbeuer    schedule 07.07.2015    source sumber


Jawaban (1)


VideoView menggunakan SurfaceView secara internal untuk menampilkan video Anda. Menurut SurfaceView Javadoc:

Permukaannya diurutkan Z sehingga berada di belakang jendela yang memegang SurfaceView-nya; SurfaceView membuat lubang di jendelanya agar permukaannya dapat ditampilkan. Hirarki tampilan akan mengatur pengomposisian dengan benar dengan Surface, semua saudara dari SurfaceView yang biasanya muncul di atasnya.

Anda dapat menggunakan TextureView untuk mengatasi masalah ini. Periksa pertanyaan serupa.

person JiTHiN    schedule 07.07.2015
comment
Ini sangat membantu saya, saya akan mempertimbangkannya saat berikutnya saya mencoba membuat sesuatu yang serupa. Terima kasih. - person Ranbeuer; 08.07.2015