You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:52:37