封装SurfaceView+Mediaplayer,支持手势进度、音量、屏幕亮度调节,双击暂停播放

封装的视频播放控件,使用了SurfaceView+Mediaplayer实现,并添加了多种手势支持,如滑动调节音量、亮度、视频快进快退和重力感应。SurfaceView和Mediaplayer的使用并没什么难的,此次封装核心在于手势判断,其他地方可能还有Bug,另外记录一个坑,我发现如果手机开启了息屏显示的功能,当锁屏时SurfaceView会重复执行surfaceDestroyed—>surfaceCreated—>surfaceDestroyed这两个方法,可能会对视频播放产生异常,还没有想到什么办法能够解决这个问题,如果有知道的可以私信或评论告知。

封装效果

因为是屏幕录制,所以亮度效果看不出,实际是变化的。

代码地址

https://github.com/kjt666/MyVideoView

 

 

要实现控制视频暂停播放进度条和音量,需要结合 MediaPlayerSurfaceView,并且还需要使用一些其他的 Android 组件,例如 SeekBar 和 ImageButton。 具体实现步骤如下: 1. 在布局文件中定义一个 SurfaceView 和一些控制按钮,例如播放/暂停按钮和进度条。 2. 在 Activity 或 Fragment 中实例化 MediaPlayer 对象,并将其与 SurfaceView 绑定。 ``` MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(videoPath); mediaPlayer.setDisplay(surfaceView.getHolder()); mediaPlayer.prepare(); mediaPlayer.start(); ``` 3. 实现控制按钮的点击事件,并根据当前状态执行相应的操作。 ``` // 播放/暂停按钮点击事件 playPauseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); playPauseButton.setImageResource(R.drawable.ic_play); } else { mediaPlayer.start(); playPauseButton.setImageResource(R.drawable.ic_pause); } } }); ``` 4. 实现进度条的拖动事件,并根据拖动位置更新视频播放进度。 ``` // 进度条拖动事件 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { mediaPlayer.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); ``` 5. 实现音量控制,可以通过 AudioManager 来控制音量大小。 ``` // 增加音量按钮点击事件 increaseVolumeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (currentVolume < maxVolume) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume + 1, 0); } } }); // 减少音量按钮点击事件 decreaseVolumeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (currentVolume > 0) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume - 1, 0); } } }); ``` 以上就是一个简单的控制视频暂停播放进度条和音量的实现步骤。需要注意的是,每个控制按钮的点击事件都需要在 UI 线程中执行,否则会抛出异常。同时,为了避免内存泄漏,在 Activity 或 Fragment 销毁时需要释放 MediaPlayer 对象以及其他资源。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值