ViewGroup отстает от ViewPager Android Studio

#java #android #android-studio #android-viewpager #android-viewgroup

Вопрос:

Я создаю приложение, которое использует ViewPager2 для отображения видео и SurfaceView для отображения предварительного просмотра фронтальной камеры. Вид поверхности добавляется в список кадров группой просмотра, и когда я запускаю программу, начальное открытие выглядит так, как задумывалось: первое видео воспроизводится в фоновом режиме, а предварительный просмотр камеры отображается поверх видового экрана, однако, как только я перехожу к следующему видео на видовом экране, экран предварительного просмотра камеры переходит за видовой экран.
Вот код Java:

   private ViewPager2 videosViewPager;
    private SurfaceView previewDisplayView;
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentViewLayoutResId());

        previewDisplayView = new SurfaceView(this);
        setupPreviewDisplayView();


         videosViewPager = findViewById(R.id.videosViewPager);

        List<VideoItem> videoItems = new ArrayList<>();

        VideoItem life = new VideoItem();
        String path = "android.resource://" getPackageName() "/"  R.raw.video;
        life.videoURL = Uri.parse(path);
   
        videoItems.add(life);

        VideoItem rest = new VideoItem();
        String path2 = "android.resource://" getPackageName() "/"  R.raw.video1;
        rest.videoURL = Uri.parse(path);
  
        videoItems.add(rest);

        videosViewPager.setAdapter(new VideoAdapter(videoItems));
}

    private void setupPreviewDisplayView() {
        previewDisplayView.setVisibility(View.GONE);
        ViewGroup viewGroup = findViewById(R.id.preview_display_layout);
        viewGroup.addView(previewDisplayView);

        previewDisplayView
                .getHolder()
                .addCallback(
                        new SurfaceHolder.Callback() {
                            @Override
                            public void surfaceCreated(SurfaceHolder holder) {
                                processor.getVideoSurfaceOutput().setSurface(holder.getSurface());
                                Log.d("Surface","Surface Created");

                            }

                            @Override
                            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                                onPreviewDisplaySurfaceChanged(holder, format, width, height);
                                
                                Log.d("Surface","Surface Changed");
                            }

                            @Override
                            public void surfaceDestroyed(SurfaceHolder holder) {
                                processor.getVideoSurfaceOutput().setSurface(null);
                                Log.d("Surface","Surface destroy");
                            }

                        });

    }  
 

XML:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/parentPanel"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:hardwareAccelerated="true"
    tools:context=".MainActivity">


    <androidx.viewpager2.widget.ViewPager2
        android:id="@ id/videosViewPager"
        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical"

        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp">
    </androidx.viewpager2.widget.ViewPager2>

<RelativeLayout
    android:id="@ id/parentRelative"
    android:elevation="4dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:ignore="MissingConstraints">

    <FrameLayout
        android:id="@ id/preview_display_layout"
        android:layout_width="134dp"
        android:layout_height="209dp"
        android:visibility="visible"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteX="216dp"
        tools:layout_editor_absoluteY="0dp" />

</RelativeLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

 

I know that the problem must be in the ViewGroup usage because RelativeLayout is always on top of the ViewPager(I know this because of elevation), however, its child:FrameLayout disappears after a swipe.
Is there a way to make ViewGroup views get displayed on top of everything else?
Thank you!