使用VideoView做个实用的视频播放器
目錄
- 最終效果圖
- 前言
- 布局文件
- VideoView的使用
- 橫豎屏切換
- 文件選擇
- 手勢(shì)調(diào)節(jié)音量
- 最后
最終效果圖
前言
這里用VideoView寫一個(gè)播放器, 可以橫豎屏, 可以選文件, 可以暫停, 可以快進(jìn)后退, 可以進(jìn)度條拖動(dòng), 可以觸屏調(diào)節(jié)音量. 來(lái)看看怎么實(shí)現(xiàn)的吧!
布局文件
用RelativeLayout包裹VideoView是要點(diǎn), 常規(guī)設(shè)置會(huì)形變的. 當(dāng)然了, 還要重寫onConfigurationChanged, 見(jiàn)后面橫豎屏切換.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:context="com.so.mymedia.ui.activity.MainActivity"tools:showIn="@layout/activity_main"><RelativeLayoutandroid:id="@+id/rl_vv"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/black"android:minHeight="200dp"><VideoViewandroid:id="@+id/vv_video"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_centerInParent="true" /></RelativeLayout> </RelativeLayout> 復(fù)制代碼VideoView的使用
VideoView使用起來(lái)非常簡(jiǎn)單, 設(shè)置好MediaController, 然后設(shè)置URI或者是Path, 然后start開(kāi)始就好. 這里的要點(diǎn)是一些使用功能的實(shí)現(xiàn). 可以查閱官方文檔.
橫豎屏切換
第一步是到配置文件里面設(shè)置. 在activity標(biāo)簽下添加android:configChanges="keyboard|orientation|screenSize". 這樣的話, 屏幕切換的時(shí)候不會(huì)去調(diào)用onStop等方法. 我們?cè)赥oolbar里面添加切換橫豎屏按鈕, 然后重寫onConfigurationChanged.
@Override public void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);if (mVvVideo == null) {return;}if (this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE) {// 橫屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);getWindow().getDecorView().invalidate();float height = new ScreenUtil(this).getAppWidth();float width = new ScreenUtil(this).getAppHeight();mRlVv.getLayoutParams().height = (int) width;mRlVv.getLayoutParams().width = (int) height;} else {// 豎屏final WindowManager.LayoutParams attrs = getWindow().getAttributes();attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);getWindow().setAttributes(attrs);getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);float width = new ScreenUtil(this).getAppWidth();float height = DisplayUtil.dp2px(this, 200.f);mRlVv.getLayoutParams().height = (int) height;mRlVv.getLayoutParams().width = (int) width;} } 復(fù)制代碼里面有幾個(gè)uitl, 都是常見(jiàn)的封裝, 不多說(shuō)了. 這樣就可以實(shí)現(xiàn)橫豎屏切換了.
文件選擇
關(guān)于文件選擇器, 請(qǐng)查看我之前的文章. 然后就是要返回選中的文件路徑. 這是Intent的常規(guī)使用了. 不多說(shuō)了.
手勢(shì)調(diào)節(jié)音量
添加觸摸監(jiān)聽(tīng), 然后用手勢(shì)操作實(shí)現(xiàn). 然后是依據(jù)上下劃方向確定增大還是減小音量. 調(diào)節(jié)音量的代碼也是很常規(guī)的了.
@Override public boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event); } 復(fù)制代碼@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {float v = e2.getY() - e1.getY();if (Math.abs(v) > 10) {setVoiceVolume(v);}return true; } 復(fù)制代碼private void setVoiceVolume(float value) {int currentVolume = mAM.getStreamVolume(AudioManager.STREAM_MUSIC);int maxVolume = mAM.getStreamMaxVolume(AudioManager.STREAM_MUSIC);int flag = value > 0 ? -1 : 1;currentVolume += flag * 0.15 * maxVolume;mAM.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume, 0); } 復(fù)制代碼最后
如果想更多的DIY, 可以考慮使用SurfaceView, 但是VideoView大部分時(shí)候也夠用了. 喜歡記得點(diǎn)贊或者關(guān)注我, 有意見(jiàn)或者建議評(píng)論區(qū)見(jiàn).
總結(jié)
以上是生活随笔為你收集整理的使用VideoView做个实用的视频播放器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 琼脂粉的用法和用途
- 下一篇: WebApi项目创建CURD