Android ViewPager2+Fragment 中使用 SurfaceView 播放视频无画面问题解决
要在 Fragment 中使用 SurfaceView 播放视频并解决只有声音没有画面的问题,你需要进行以下步骤:
- 首先,在你的 Fragment 布局文件中添加一个 SurfaceView 元素,用于显示视频画面。例如,可以在
fragment_video.xml文件中添加以下代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
- 在你的 Fragment 类中,初始化 SurfaceView 并设置 MediaPlayer。例如,可以在
VideoFragment.java文件中添加以下代码:
public class VideoFragment extends Fragment implements SurfaceHolder.Callback {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_video, container, false);
surfaceView = view.findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
return view;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(holder);
try {
mediaPlayer.setDataSource('your_video_url');
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// Do nothing
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mediaPlayer.release();
}
}
在上面的代码中,你需要将 'your_video_url' 替换为你想要播放的视频的 URL。
- 确保在你的 Activity 中使用 ViewPager2 来展示 Fragment。例如,在
MainActivity.java中的onCreate方法中添加以下代码:
ViewPager2 viewPager2 = findViewById(R.id.viewPager2);
viewPager2.setAdapter(new FragmentStateAdapter(this) {
@NonNull
@Override
public Fragment createFragment(int position) {
return new VideoFragment();
}
@Override
public int getItemCount() {
return 1; // 设置 Fragment 数量
}
});
确保你在 MainActivity 的布局文件中添加了一个 ViewPager2 元素,并将其 id 设置为 'viewPager2'。
这样,你就可以在 Fragment 中使用 SurfaceView 播放视频,并解决只有声音没有画面的问题了。记得替换 'your_video_url' 为你自己的视频 URL。
原文地址: https://www.cveoy.top/t/topic/qgVP 著作权归作者所有。请勿转载和采集!