目錄
- 最終效果圖
- 前言
- 佈局檔案
- VideoView的使用
- 橫豎屏切換
- 檔案選擇
- 手勢調節音量
- 最後
最終效果圖
前言
這裡用VideoView寫一個播放器, 可以橫豎屏, 可以選檔案, 可以暫停, 可以快進後退, 可以進度條拖動, 可以觸屏調節音量. 來看看怎麼實現的吧!
佈局檔案
用
RelativeLayout
包裹VideoView
是要點, 常規設定會形變的. 當然了, 還要重寫onConfigurationChanged
, 見後面橫豎屏切換.
<?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">
<RelativeLayout
android:id="@+id/rl_vv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/black"
android:minHeight="200dp">
<VideoView
android:id="@+id/vv_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
</RelativeLayout>
複製程式碼
VideoView的使用
VideoView使用起來非常簡單, 設定好MediaController, 然後設定URI或者是Path, 然後start開始就好. 這裡的要點是一些使用功能的實現. 可以查閱官方文件.
橫豎屏切換
第一步是到配置檔案裡面設定. 在activity標籤下新增
android:configChanges="keyboard|orientation|screenSize"
. 這樣的話, 螢幕切換的時候不會去呼叫onStop等方法. 我們在Toolbar裡面新增切換橫豎屏按鈕, 然後重寫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;
}
}
複製程式碼
裡面有幾個uitl, 都是常見的封裝, 不多說了. 這樣就可以實現橫豎屏切換了.
檔案選擇
關於檔案選擇器, 請檢視我之前的文章. 然後就是要返回選中的檔案路徑. 這是Intent的常規使用了. 不多說了.
手勢調節音量
新增觸控監聽, 然後用手勢操作實現. 然後是依據上下劃方向確定增大還是減小音量. 調節音量的程式碼也是很常規的了.
@Override
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
複製程式碼
@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;
}
複製程式碼
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);
}
複製程式碼
最後
如果想更多的DIY, 可以考慮使用SurfaceView, 但是VideoView大部分時候也夠用了. 喜歡記得點贊或者關注我, 有意見或者建議評論區見.