前言

需求是模仿今日头条短视频播放,过程中遇到的问题如下:

  1. 优酷云播放器SDK在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作。
  2. ListView中加载过多的视频播放器在滑动过程中保证用户体验。

进入ListView中会看到一列视频,看到的视频仅仅是视频的封面,点击播放的图标,才会初始化播放器控件,进行播放视频的操作,保证了列表中视频播放时候的流程和操作体验。


一、解决SDK在ListView嵌套模式下全屏工作

优酷云SDK播放器点击全屏时候,播放器会充满他的父容器。ListView中的Item不是。进行自定义横竖屏操作,重写全屏按钮的实现方法,进行全屏操作时候,打开一个新的播放器页面,再进行全屏操作。

禁用播放器本身的横竖屏设置

youkuPlayerView.setUseOrientation(false);

然后再通过youkuPlayerView.setUIListener设置对横竖屏按钮的监听

...
youkuPlayerView.setUIListener(new YoukuUIListener() {@Overridepublic void onBackBtnClick() { }@Overridepublic void onFullBtnClick() {// 打开全屏的ActivityIntent intent = new Intent();intent.setClass(mContext, VideoFullscreenActivity.class);startActivity(intent);}});
...

重写播放器Activity的onConfigurationChanged,此处是监听手机旋转的地方,在这里加上自定义的横竖屏处理代码

    @Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {// 即使响应为竖屏,也强制设置为横屏,这样可以始终保持横屏this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}}

二、ListView中加载过多的视频播放器在滑动过程中保证用户体验

    // 1.定义变量,用于记录当前的playerView控件private YoukuPlayerView currentPlayerView;...viewHolder.iv_bg.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 2.点击播放器浮层上的播放按钮,将上一个正在播放的视频控件释放掉if (null!=currentPlayerView) {currentPlayerView.release();}// 更新正在播放的currentPlayerView控件currentPlayerView = viewHolder.ypv;initCheckedStatus();isChecked.put(position, true);viewHolder.rl_bg.setVisibility(View.INVISIBLE);currentPlayerView.setVisibility(View.VISIBLE);// 播放器控件初始化initPlayer(currentPlayerView);// 开始播放currentPlayerView.playYoukuVideo(vid);notifyDataSetChanged();}});if (isChecked.get(position)) {viewHolder.rl_bg.setVisibility(View.INVISIBLE);viewHolder.ypv.setVisibility(View.VISIBLE);} else {viewHolder.iv_bg.setVisibility(View.VISIBLE);viewHolder.ypv.setVisibility(View.INVISIBLE);}return convertView;}

四、遇到的问题

点击ListView中其中一个视频,进行全屏操作,然后返回。会发现视频出于黑屏,无法播放,优酷SDK报错误。将onResume()中再次将控件进行初始化,并且调用控件的onPause()方法

@Overrideprotected void onResume() {super.onResume();Log.i("MainActivity", "onResume()");if(null!=currentPlayerView) {initPlayer(currentPlayerView);currentPlayerView.pause();}}public void initPlayer(YoukuPlayerView youkuPlayerView) {youkuPlayerView.attachActivity(MainActivity.this);youkuPlayerView.setPreferVideoDefinition(VideoDefinition.VIDEO_HD);youkuPlayerView.setPlayerListener(new MyPlayerListener());youkuPlayerView.setUseOrientation(false);youkuPlayerView.setUIListener(new YoukuUIListener() {@Overridepublic void onBackBtnClick() {}@Overridepublic void onFullBtnClick() {Toast.makeText(mContext, "竖屏", Toast.LENGTH_SHORT).show();Intent intent = new Intent();intent.setClass(mContext, VideoFullscreenActivity.class);startActivity(intent);}});}

利用优酷云SDK仿今日头条短视频播放相关推荐

  1. Android 仿今日头条的视频播放控件(几行代码快速实现)

    前段时间由于项目需要用到类似于今日头条的视频播放器,实现在线播放,边缓存边播放,当然也可以播放本地文件,如下图: 这里我推荐大家使用的是jiecaovideoplayer开源库,这个库的播放引擎是ij ...

  2. android 高仿苹果listview,GitHub - open-android/JieCaoVideoPlayer: 高仿今日头条ListView视频播放和优酷视频播放悬浮窗...

    ##主要特点 视频全屏播放和浮层小窗播放 可以完全自定义UI 能在ListView.ViewPager和ListView.ViewPager和Fragment等多重嵌套模式下全屏工作 手势修改进度和音 ...

  3. 安卓视频播放器 一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定,仿今日头条 Android视频播放器

    一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定,真正实现Android的全屏功能 github地址:https://github.com/qius ...

  4. 安卓视频播放器 仿今日头条视频播放控件----JiaoZiVideoPlayer

    前段时间由于项目需要用到类似于今日头条的视频播放器,实现在线播放,边缓存边播放,当然也可以播放本地文件,如下图: 这里写图片描述 这里我推荐大家使用的是jiecaovideoplayer开源库,这个库 ...

  5. Android仿今日头条的开源项目

    起因 看到众多大神纷纷有了自己的开源项目,于是自己琢磨着也想做一个开源项目来学习下,因为每次无聊必刷的app就是今日头条,评论简直比内容都精彩,所以我打算仿今日头条来练练手,期间也曾放弃过,也遇到很多 ...

  6. android 横向滚动 导航,仿今日头条横向滚动导航栏--原生js

    咳咳!先打一波小广告,在上一篇里忘记了,那啥--我的那个个人博客做好了-->(我的博客) 好嘞,言归正传,说说我们的效果. 其实就是实现横向滑动,进行选择. 原理: 鼠标按下,获取当前鼠标坐标, ...

  7. python爬虫框架论文开题报告范文_仿今日头条新闻爬虫设计毕业论文+设计源码+开题报告...

    摘要 随着社会日新月异和互联网进入大数据时代,自媒体得到了迅猛的发展,人们获取新闻资讯的方式越来越多,接触和使用新闻信息的方式正在逐渐改变,受众从被动接受信息到按需主动搜索信息,而新闻的种类繁多杂乱, ...

  8. Android仿今日头条开源项目

    起因 看到众多大神纷纷有了自己的开源项目,于是自己琢磨着也想做一个开源项目来学习下,因为每次无聊必刷的app就是今日头条,评论简直比内容都精彩,所以我打算仿今日头条来练练手,期间也曾放弃过,也遇到很多 ...

  9. Android 仿今日头条的开源项目

    前言 看到众多大神纷纷有了自己的开源项目,于是自己琢磨着也想做一个开源项目来学习下,因为每次无聊必刷的 app 就是今日头条,评论简直比内容都精彩,所以我打算仿今日头条来练练手,期间也曾放弃过,也遇到 ...

最新文章

  1. php获取表字段,使用 php 获取表的字段信息
  2. PHPExcel设置自动列宽
  3. 智能车大赛信标组_第十五届全国大学生智能汽车竞赛在南京信息工程大学圆满闭幕...
  4. 【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论
  5. UVa11809-Floating-Point Numbers
  6. 迁移学习与模型融合问题若干
  7. hashmap初试数组大小为什么一定要是2 的倍数
  8. flash builder4.6 集成svn1.8报错
  9. md5加密特征码java,讨论:加密算法特征码及其识别
  10. 1386 - Cellular Automaton
  11. 高中英语语法(001)-虚拟语气
  12. Excel如何简单快速的建立二级下拉菜单?
  13. Nefu 锐格实验9
  14. JVM虚拟机与Android虚拟机
  15. 时间序列及异常检测综述(资料)
  16. 【华为OD统一考试B卷 | 100分】按身高和体重排队(C++ Java JavaScript Python)
  17. 计算机方面的英语杂志,计算机类有哪些EI检索的英文期刊
  18. Centos配置Jenkins实现Android自动打包并上传到蒲公英
  19. Linux中提示No such file or directory解决方法
  20. 【STM8】PWM 捕获实战:占空比和频率(TIM1)

热门文章

  1. 网络与通信程序设计-基于UDP的广播通信实例
  2. 解读微信公众号的推广运营之道
  3. iOS SpriteKit/SceneKit/Metal浅析
  4. vue使用filter过滤器实现简单的搜索功能
  5. 屏幕取词技术实现原理与关键源码
  6. 华为汽车鸿蒙系统,华为的鸿蒙系统到底有多强大?预计最快明年在汽车上就能看到了...
  7. MySQL安全秘籍:守护数据金库,防火防盗防攻击
  8. ThinkPHP之getfield详解
  9. 你不知道的redis三-Redis的持久化机制
  10. Latex 绘制流程图