首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法制作自定义VideoView进度条而无需从头开始构建MediaPlayer?

有办法制作自定义VideoView进度条而无需从头开始构建MediaPlayer。以下是一些建议:

  1. 使用Android的MediaController控件:

MediaController是Android系统提供的一个控件,可以用来显示视频的进度条、播放/暂停按钮等。你可以在布局文件中添加MediaController控件,并将其与VideoView关联。

代码语言:xml<VideoView
复制
    android:id="@+id/videoView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" /><MediaController
    android:id="@+id/mediaController"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

然后在代码中将MediaControllerVideoView关联:

代码语言:java
复制
VideoView videoView = findViewById(R.id.videoView);
MediaController mediaController = findViewById(R.id.mediaController);

videoView.setMediaController(mediaController);
videoView.setVideoPath("your_video_path");
videoView.start();
  1. 自定义进度条:

如果你想要自定义进度条的样式,可以创建一个新的布局文件,然后在代码中将其设置为MediaController的子视图。例如,你可以创建一个名为custom_media_controller.xml的布局文件,并在其中添加一个SeekBar控件:

代码语言:xml<LinearLayout
复制
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <!-- 添加其他控件,如播放/暂停按钮等 -->

</LinearLayout>

然后在代码中将这个布局文件设置为MediaController的子视图:

代码语言:java
复制
MediaController mediaController = new MediaController(this);
View customMediaController = LayoutInflater.from(this).inflate(R.layout.custom_media_controller, null);
mediaController.addView(customMediaController);

VideoView videoView = findViewById(R.id.videoView);
videoView.setMediaController(mediaController);
videoView.setVideoPath("your_video_path");
videoView.start();

这样,你就可以自定义进度条的样式,而无需从头开始构建MediaPlayer

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(一百二十五)自定义视频播放器

在Android中播放视频的方式有两种: 1、使用MediaPlayer结合SurfaceView进行播放。其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置播放参数、并控制视频的播放操作;该方式的具体说明参见《Android开发笔记(五十七)录像录音与播放》。 该方式的好处是灵活性强,可随意定制。缺点是编码复杂,连开始/暂停的按钮都要自己实现。 2、使用VideoView结合MediaController进行播放。VideoView其实是从SurfaceView扩展而来,并在内部集成了MediaPlayer,从而实现视频画面与视频操作的统一管理;而MediaController则是一个简单的播放控制条,它实现了基本的控制按钮,如开始/暂停按钮、上一个/下一个按钮、快进/快退按钮,以及进度条等控件;把VideoView与MediaController关联起来,便是一个类似于Window Media Player的精简版播放器。 该方式的好处是简单易用,编码容易。缺点是可定制差,难以扩展,想给按钮换个样式都不行。 但是不积跬步无以至千里,如果我们要定制一个好用好看的播放器,还是得先把笨拙的VideoView与MediaController搞清楚才行。就像穷国一开始没有汽车工业,那只能从研究拖拉机开始,没办法一蹴而就强行大跃进呀。

04

Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout

下拉刷新布局SwipeRefreshLayout是Android又一与时俱进的控件,顾名思义它随着用户手势向下滑动就会触发刷新操作。从实际的下拉效果来看,SwipeRefreshLayout秉承了Android一贯的简洁界面,可定制性并不太好,远不如开源的下拉刷新框架PullToRefresh,但毕竟是原生的控件,用起来比较方便,所以我们还是好好了解了解它。 SwipeRefreshLayout最早在19.1的support-v4库中引入,所以要先确保sdk的“Android Support Library”版本不低于19.1。另外,SwipeRefreshLayout的源码多次升级,因此有新版与旧版之分,两版之间不但支持的方法有区别,而且界面效果也有差异。 下面是SwipeRefreshLayout的常用方法说明: setColorScheme : 设置进度条/圆圈的颜色。(该方法在新版中已被废弃) setOnRefreshListener : 设置刷新监听器。在下拉松开时触发该监听器,需要重写该监听器的onRefresh方法。 setRefreshing : 设置刷新的状态。true表示正在刷新,false表示结束刷新。 isRefreshing : 判断是否正在刷新。 下面是新版增加的方法说明: setColorSchemeColors : 设置进度圆圈的圆环颜色。 setProgressBackgroundColorSchemeColor : 设置进度圆圈的背景颜色。 setProgressViewOffset : 设置进度圆圈的偏移量。第一个参数表示进度圈是否缩放,第二个参数表示进度圈开始出现时距顶端的偏移,第三个参数表示进度圈拉到最大时距顶端的偏移。 setDistanceToTriggerSync : 设置手势向下滑动多少距离才会触发刷新操作。 SwipeRefreshLayout的旧版与新版之间的界面区别主要有: 1、旧版的进度条是布局顶部的一条横线,而新版的布局顶部的一个圆圈。 2、旧版在下拉时,进度条不动,页面会随着向下滑动;而新版在下拉时,页面不再向下滑动,进度圆圈会向下滑动。 这两种显示效果各有千秋,开发者可按照个人喜好决定采用哪种效果。需要注意的是,想要旧版的效果,就得使用旧版的android-support-v4.jar;想要新版的效果,就得使用新版的android-support-v4.jar。新旧两版的v4包见本文末尾的代码工程。 下面是旧版SwipeRefreshLayout的下拉刷新效果截图:

03
领券