安卓Andriod使用入门(十九)【网络视频播放器】
2016-11-20 22:54
288 查看
有时侯明白人的一生当中,深刻的思念是维系自己与记忆的纽带。它维系着所有的过往、悲喜,亦指引我们深入茫茫命途。这是我们宿命的背负。但我始终甘之如饴地承受它的沉沉重量,用以平衡轻浮的生。
MainActivity.java代码:
package siso.supervideoplayer; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import siso.videoplayerlib.util.DensityUtil; import siso.videoplayerlib.view.MediaController; import siso.videoplayerlib.view.SuperVideoPlayer; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private SuperVideoPlayer mSuperVideoPlayer; private View mPlayBtnView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSuperVideoPlayer = (SuperVideoPlayer) findViewById(R.id.video_player_item_1); mPlayBtnView = findViewById(R.id.play_btn); mPlayBtnView.setOnClickListener(this); mSuperVideoPlayer.setVideoPlayCallback(mVideoPlayCallback); } /** * 播放器的回调函数 */ private SuperVideoPlayer.VideoPlayCallbackImpl mVideoPlayCallback = new SuperVideoPlayer.VideoPlayCallbackImpl() { /** * 播放器关闭按钮回调 */ @Override public void onCloseVideo() { mSuperVideoPlayer.close();//关闭VideoView mPlayBtnView.setVisibility(View.VISIBLE); mSuperVideoPlayer.setVisibility(View.GONE); resetPageToPortrait(); } /** * 播放器横竖屏切换回调 */ @Override public void onSwitchPageType() { if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mSuperVideoPlayer.setPageType(MediaController.PageType.SHRINK); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); mSuperVideoPlayer.setPageType(MediaController.PageType.EXPAND); } } /** * 播放完成回调 */ @Override public void onPlayFinish() { } }; @Override public void onClick(View view) { mPlayBtnView.setVisibility(View.GONE); mSuperVideoPlayer.setVisibility(View.VISIBLE); mSuperVideoPlayer.setAutoHideController(false); Uri uri = Uri.parse("http://v.cctv.com/flash/mp4video6/TMS/2011/01/05/cf752b1c12ce452b3040cab2f90bc265_h264818000nero_aac32-1.mp4"); mSuperVideoPlayer.loadAndPlay(uri,0); } /*** * 旋转屏幕之后回调 * * @param newConfig newConfig */ @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (null == mSuperVideoPlayer) return; /*** * 根据屏幕方向重新设置播放器的大小 */ if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().getDecorView().invalidate(); float height = DensityUtil.getWidthInPx(this); float width = DensityUtil.getHeightInPx(this); mSuperVideoPlayer.getLayoutParams().height = (int) width; mSuperVideoPlayer.getLayoutParams().width = (int) height; } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 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 = DensityUtil.getWidthInPx(this); float height = DensityUtil.dip2px(this, 200.f); mSuperVideoPlayer.getLayoutParams().height = (int) height; mSuperVideoPlayer.getLayoutParams().width = (int) width; } } /*** * 恢复屏幕至竖屏 */ private void resetPageToPortrait() { if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mSuperVideoPlayer.setPageType(MediaController.PageType.SHRINK); } } }
activity_main.xml内容:
<?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:background="@android:color/white" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/holo_blue_light" android:minHeight="200dp"> <ImageView android:id="@+id/play_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/biz_video_list_play_icon_big"/> <siso.videoplayerlib.view.SuperVideoPlayer android:id="@+id/video_player_item_1" android:layout_width="match_parent" android:layout_height="200dp" android:visibility="gone"> </siso.videoplayerlib.view.SuperVideoPlayer> </FrameLayout> </LinearLayout>
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="siso.supervideoplayer"> <uses-permission android:name="android.permission.INTERNET"/> <permission android:name="android.permission.INTERNET" /> <permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
videoplayerlib库项目结构:
项目运行结果如图:
相关文章推荐
- 安卓Andriod使用入门(十九)【视频播放列表】
- 安卓Andriod使用入门(十六)【地图定位 选址】
- 安卓Andriod使用入门(十)【3D立体无限旋转】
- 安卓Andriod使用入门(一)【圆形Menu菜单】
- 安卓Andriod使用入门(八)【联动ListView】
- 安卓Andriod使用入门(九)【悬浮窗菜单】
- 安卓Andriod使用入门(十七)【卡片视图的形式管理Activity】
- 安卓Andriod使用入门(二十四)【爬取网络小说】
- 安卓Andriod使用入门(六)【动态GridView控件】
- 安卓Andriod使用入门(二十五)【爬新闻】
- 安卓Andriod使用入门(二十一)【视差效果引导页】
- 安卓Andriod使用入门(二十二)【漂亮酷炫的引导页】
- 安卓Andriod使用入门(二十三)【百度地图API】
- 安卓Andriod使用入门(十三)【九宫格展示图片】
- 安卓Andriod使用入门(二)【高仿安卓微信6.0】
- 安卓入门笔记之HttpURLConnection的使用
- Tab标签的使用【安卓入门六】
- 安卓入门纪录之-jni使用配置方法
- Glide 入门到精通之十九——动态使用 Model Loader
- 安卓入门一之基本控件使用