VideoView 在视频播放 JAVA/XML 之前闪烁一下

问题描述 投票:0回答:1

我在课堂上有一个视频,当用户第一次登陆应用程序时会打开该视频,这有点像添加到如何实际使用该应用程序的说明中的一个很好的设计。然而,就在视频开始播放之前,有一个瞬间屏幕闪烁变黑,然后视频开始播放。

我看过这个:Android VideoView黑屏,但没有一个答案有效。我也看了其他一些,但也没有效果。

这是我的代码:

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.slider_layout, container, false);

    ImageView slideImageView = view.findViewById(R.id.imageView);
    VideoView slideVideoView = view.findViewById(R.id.videoView);
    TextView slideHeading = view.findViewById(R.id.textTitle);
    TextView slideDescription = view.findViewById(R.id.textDescription);

    MediaItem item = mediaItems[position];

    if (item.getType() == MediaItem.MediaType.IMAGE) {
        slideImageView.setImageResource(item.getResourceId());
        slideImageView.setVisibility(View.VISIBLE);
        slideVideoView.setVisibility(View.GONE);
    } else if (item.getType() == MediaItem.MediaType.VIDEO) {
        slideImageView.setVisibility(View.GONE);
        slideVideoView.setVisibility(View.VISIBLE);


        // Set the video URI using the resource ID
        Uri videoUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + item.getResourceId());
        slideVideoView.setVideoURI(videoUri);

        // Start video playback when it's ready
        slideVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                slideVideoView.start();
            }
        });
    }

    slideHeading.setText(headings[position]);
    slideDescription.setText(descriptions[position]);

    container.addView(view);
    return view;
}

这是我的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/background_color"
android:padding="16dp">

<SurfaceView
    android:layout_width="0px"
    android:layout_height="0px"
    android:visibility="gone" />

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="100dp">

<VideoView
    android:id="@+id/videoView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal" />

</FrameLayout>


<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="210dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="100dp"
    android:src="@drawable/baseline_image_24" />

<TextView
    android:id="@+id/textTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:textSize="24sp"
    android:textColor="@android:color/white"
    android:textAlignment="center"
    android:paddingTop="16dp"
    android:text="@string/heading_1" />

<TextView
    android:id="@+id/textDescription"
    android:textAlignment="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:textSize="16sp"
    android:textColor="@android:color/white"
    android:paddingTop="8dp"
    android:text="@string/description_1" />

我有一组图像和视频,这是调用 mediaItems 的地方。如果还有什么需要的请评论,我会补充。

android android-videoview
1个回答
0
投票

我在发布问题几分钟后找到了答案。我拍摄了视频视图,并将 ZOrderOnTop 设置为 true,然后闪烁就消失了。

编辑后的代码行将是

// Set the video URI using the resource ID
   Uri videoUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + item.getResourceId());
   slideVideoView.setVideoURI(videoUri);

// ADDED LINE 
   slideVideoView.setZOrderOnTop(true);

如果有其他方法来修复这个奇怪的错误,请随时回复此答案

© www.soinside.com 2019 - 2024. All rights reserved.