要在 Fragment 中使用 SurfaceView 播放视频并解决只有声音没有画面的问题,你需要进行以下步骤:

  1. 首先,在你的 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>
  1. 在你的 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。

  1. 确保在你的 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。

Android ViewPager2+Fragment 中使用 SurfaceView 播放视频无画面问题解决

原文地址: https://www.cveoy.top/t/topic/qgVP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录