Android开发:如何使用VideoView实现视频循环播放并静音
实现VideoView循环播放+静音的解决方案
嗨,作为Android开发新手,搞定这两个功能其实很简单,我帮你把代码改好,每一步都给你说明白~
第一步:确认布局文件(fragment_bench.xml)
先确保你的布局里有正确的VideoView组件,你可以参考这个示例调整:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <!-- 锻炼视频的VideoView --> <VideoView android:id="@+id/bench_video" android:layout_width="match_parent" android:layout_height="250dp" android:background="@color/black" /> </LinearLayout>
这里给VideoView加了固定高度和背景,你可以根据自己的UI需求调整尺寸和样式。
第二步:修改BenchFragment.java实现功能
接下来在Fragment里处理视频的循环和静音逻辑,直接看修改后的代码:
import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.VideoView; import androidx.fragment.app.Fragment; public class BenchFragment extends Fragment { private VideoView mBenchVideo; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_bench, container, false); mBenchVideo = rootView.findViewById(R.id.bench_video); // 1. 设置视频源(替换成你的视频路径) // 本地raw文件夹的视频:android.resource://包名/raw/视频文件名(不带后缀) String videoUri = "android.resource://" + requireActivity().getPackageName() + "/" + R.raw.bench_workout; mBenchVideo.setVideoURI(Uri.parse(videoUri)); // 2. 实现静音:直接把左右声道音量设为0 mBenchVideo.setVolume(0f, 0f); // 3. 实现循环播放:监听播放完成事件,重新从头播放 mBenchVideo.setOnCompletionListener(mediaPlayer -> { mBenchVideo.seekTo(0); // 回到视频开头 mBenchVideo.start(); // 重新开始播放 }); // 启动视频播放 mBenchVideo.start(); return rootView; } // 优化:处理页面生命周期,避免后台浪费资源 @Override public void onPause() { super.onPause(); if (mBenchVideo.isPlaying()) { mBenchVideo.pause(); } } @Override public void onResume() { super.onResume(); if (!mBenchVideo.isPlaying()) { mBenchVideo.start(); } } }
关键代码说明:
- 静音实现:调用
mBenchVideo.setVolume(0f, 0f),直接将左右声道的音量设置为0,简单粗暴有效,不需要额外的音频权限。 - 循环播放:通过
setOnCompletionListener监听视频播放完成的事件,当播放结束时,调用seekTo(0)回到视频起始位置,再调用start()重新播放。 - 视频源设置:如果你的视频放在
res/raw文件夹下,就用示例里的格式;如果是网络视频,直接传入完整的URL即可(记得在Manifest里加<uses-permission android:name="android.permission.INTERNET" />权限)。
这样就能完美实现你要的循环播放+静音功能啦~
内容的提问来源于stack exchange,提问作者user9313301
相关产品推荐
相关产品推荐

