我在课堂上有一个视频,当用户第一次登陆应用程序时会打开该视频,这有点像添加到如何实际使用该应用程序的说明中的一个很好的设计。然而,就在视频开始播放之前,有一个瞬间屏幕闪烁变黑,然后视频开始播放。
我看过这个: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 的地方。如果还有什么需要的请评论,我会补充。
我在发布问题几分钟后找到了答案。我拍摄了视频视图,并将 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);
如果有其他方法来修复这个奇怪的错误,请随时回复此答案