ViewPager ไม่ได้ตัด VideoView เมื่อเลื่อน

ฉันกำลังเขียนหน้าจอช่วยสอนเล็กๆ น้อยๆ ในกิจกรรมที่มี ViewPager ซึ่งมีหลายหน้า ซึ่งหนึ่งในนั้นอาจเป็นวิดีโอที่ทำงานวนซ้ำไม่สิ้นสุดและรูปภาพบนหน้าอื่นๆ

ปัญหาคือเมื่อฉันเลื่อนหน้าโดยที่วิดีโอกำลังเล่น (หรือหยุดชั่วคราว) มุมมองวิดีโอจะหลุดออกจากคอนเทนเนอร์ ฉันพยายามตั้งค่าคุณสมบัติย่อยของคลิปและคุณสมบัติการเติมบนคอนเทนเนอร์และ ViewPager แต่ก็ไม่มีประโยชน์

คุณช่วยชี้ให้ฉันฟังหน่อยได้ไหมว่าอะไรเป็นสาเหตุของพฤติกรรมนี้

การตั้งค่าของวิดีโอเสร็จสิ้นภายใน PageAdapter ดังนี้:

     ![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);
    }

ป้อนคำอธิบายรูปภาพที่นี่


person Ranbeuer    schedule 07.07.2015    source แหล่งที่มา


คำตอบ (1)


VideoView ใช้ SurfaceView ภายในเพื่อแสดงวิดีโอของคุณ ตาม SurfaceView Javadoc:

พื้นผิวได้รับคำสั่ง Z เพื่อให้อยู่ด้านหลังหน้าต่างโดยถือ SurfaceView ไว้ SurfaceView เจาะรูในหน้าต่างเพื่อให้สามารถแสดงพื้นผิวได้ ลำดับชั้นของมุมมองจะดูแลการจัดวางร่วมกับ Surface อย่างถูกต้อง ซึ่งเป็นรุ่นพี่ของ SurfaceView ที่ปกติจะปรากฏอยู่ด้านบน

คุณสามารถใช้ TextureView เพื่อแก้ไขปัญหานี้ได้ ดูคำถามที่คล้ายกันนี้

person JiTHiN    schedule 07.07.2015
comment
สิ่งนี้ช่วยฉันได้มาก ฉันจะนำไปพิจารณาในครั้งต่อไปที่ฉันพยายามทำสิ่งที่คล้ายกัน ขอบคุณ - person Ranbeuer; 08.07.2015