{ "title": "Android 使用viewPage2+Fragment 在Fragment中使用MediaPlayer+SurfaceView播放视频只有声音没有画面问题解决 详细代码内容", "description": "在使用ViewPager2和Fragment的情况下,如果在Fragment中使用MediaPlayer和SurfaceView播放视频只有声音没有画面的问题,可以按照以下步骤进行解决:\n\n1. 创建一个新的Fragment类,例如VideoFragment,并在其中实现视频播放功能。\n\njava\npublic class VideoFragment extends Fragment implements SurfaceHolder.Callback {\n\n private MediaPlayer mediaPlayer;\n private SurfaceView surfaceView;\n private SurfaceHolder surfaceHolder;\n private String videoPath;\n\n public VideoFragment(String videoPath) {\n this.videoPath = videoPath;\n }\n\n @Override\n public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n View view = inflater.inflate(R.layout.fragment_video, container, false);\n\n surfaceView = view.findViewById(R.id.surfaceView);\n surfaceHolder = surfaceView.getHolder();\n surfaceHolder.addCallback(this);\n\n mediaPlayer = new MediaPlayer();\n mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);\n\n return view;\n }\n\n @Override\n public void surfaceCreated(SurfaceHolder holder) {\n try {\n mediaPlayer.setDataSource(videoPath);\n mediaPlayer.setDisplay(holder);\n mediaPlayer.prepare();\n mediaPlayer.start();\n } catch (IOException e) {\n e.printStackTrace();\n }\n }\n\n @Override\n public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {\n // Do nothing\n }\n\n @Override\n public void surfaceDestroyed(SurfaceHolder holder) {\n mediaPlayer.release();\n }\n}\n\n\n2. 创建一个新的布局文件fragment_video.xml,用于在VideoFragment中显示SurfaceView。\n\nxml\n<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n android:orientation="vertical">\n\n <SurfaceView\n android:id="@+id/surfaceView"\n android:layout_width="match_parent"\n android:layout_height="match_parent" />\n\n</LinearLayout>\n\n\n3. 在你的Activity中使用ViewPager2来展示VideoFragment。\n\njava\npublic class MainActivity extends AppCompatActivity {\n\n private ViewPager2 viewPager;\n private VideoAdapter videoAdapter;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n\n viewPager = findViewById(R.id.viewPager);\n videoAdapter = new VideoAdapter(this);\n viewPager.setAdapter(videoAdapter);\n }\n\n private class VideoAdapter extends FragmentStateAdapter {\n\n public VideoAdapter(@NonNull FragmentActivity fragmentActivity) {\n super(fragmentActivity);\n }\n\n @NonNull\n @Override\n public Fragment createFragment(int position) {\n // 根据需要传递视频路径给VideoFragment\n String videoPath = ""; // 根据实际情况设置视频路径\n return new VideoFragment(videoPath);\n }\n\n @Override\n public int getItemCount() {\n return 1; // 根据实际情况返回视频的数量\n }\n }\n}\n\n\n请确保你已经在AndroidManifest.xml中添加了适当的权限和相关配置,例如:\n\nxml\n<uses-permission android:name="android.permission.INTERNET" />\n<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />\n<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />\n\n<application\n ...\n <activity\n android:name=".MainActivity"\n android:configChanges="orientation|screenSize"\n android:screenOrientation="portrait">\n ...\n </activity\n ...\n</application>\n\n\n这样,你就可以在ViewPager2中的Fragment中使用MediaPlayer和SurfaceView播放视频了。确保视频路径正确,并根据需要进行其他适配和配置。

Android ViewPager2+Fragment 播放视频无画面解决方法 - 详细代码示例

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

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