当前位置: 首页 > news >正文

优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案

fm.jiecao:jiecaovideoplayer:x.x.x

优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案:

仅优化关键代码部分,源码:

public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " + " [" + this.hashCode() + "] ");hideSupportActionBar(getContext());ViewGroup vp = (ViewGroup) (JCUtils.scanForActivity(getContext())).findViewById(Window.ID_ANDROID_CONTENT);View old = vp.findViewById(FULLSCREEN_ID);if (old != null) {vp.removeView(old);}if (textureViewContainer.getChildCount() > 0) {textureViewContainer.removeAllViews();}try {Constructor<JCVideoPlayer> constructor = (Constructor<JCVideoPlayer>) JCVideoPlayer.this.getClass().getConstructor(Context.class);JCVideoPlayer jcVideoPlayer = constructor.newInstance(getContext());jcVideoPlayer.setId(FULLSCREEN_ID);WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);int w = wm.getDefaultDisplay().getWidth();int h = wm.getDefaultDisplay().getHeight();FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(h, w);lp.setMargins((w - h) / 2, -(w - h) / 2, 0, 0);vp.addView(jcVideoPlayer, lp);jcVideoPlayer.setShowDownloadIcon(showDownloadIcon);if (needSumWatchVideoTimerLongFlag) {jcVideoPlayer.setUpWithWatchVideoTime(videoId, url, JCVideoPlayerStandard.SCREEN_WINDOW_FULLSCREEN, objects);} else {jcVideoPlayer.setUp(videoId, url, JCVideoPlayerStandard.SCREEN_WINDOW_FULLSCREEN, objects);}jcVideoPlayer.setUiWitStateAndScreen(currentState);jcVideoPlayer.addTextureView();jcVideoPlayer.setRotation(90);final Animation ra = AnimationUtils.loadAnimation(getContext(), R.anim.start_fullscreen);jcVideoPlayer.setAnimation(ra);JCVideoPlayerManager.setLastListener(this);JCVideoPlayerManager.setListener(jcVideoPlayer);downloadButton.setVisibility(showDownloadIcon ? VISIBLE : View.GONE);} catch (InstantiationException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}

优化

详细方案

  • 隐藏ActionBar: 在全屏模式下,通常需要隐藏ActionBar以提供更好的观看体验。
  • 获取屏幕尺寸: 使用WindowManager获取当前设备的屏幕宽度和高度。
  • 视频尺寸判断: 通过JCMediaManager获取当前视频的宽度和高度,并根据宽高比决定是横屏还是竖屏。
  • 布局参数设置: 根据视频的宽高比,设置FrameLayout.LayoutParams以确保视频在全屏模式下正确显示。
  • 旋转设置: 如果视频宽度大于高度,旋转90度以横屏显示;否则,保持竖屏。
  • 添加视图和设置参数: 将新的JCVideoPlayer实例添加到视图中,并设置相关参数和动画。
  • 异常处理: 捕获并处理可能的异常,以确保程序的健壮性。

代码:

public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " + " [" + this.hashCode() + "] ");// 隐藏支持的ActionBarhideSupportActionBar(getContext());// 获取当前Activity的内容视图ViewGroup vp = (ViewGroup) (JCUtils.scanForActivity(getContext())).findViewById(Window.ID_ANDROID_CONTENT);View old = vp.findViewById(FULLSCREEN_ID);if (old != null) {vp.removeView(old); // 移除旧的全屏视图}if (textureViewContainer.getChildCount() > 0) {textureViewContainer.removeAllViews(); // 移除TextureView容器中的所有视图}try {// 通过反射创建一个新的JCVideoPlayer实例Constructor<JCVideoPlayer> constructor = (Constructor<JCVideoPlayer>) JCVideoPlayer.this.getClass().getConstructor(Context.class);JCVideoPlayer jcVideoPlayer = constructor.newInstance(getContext());jcVideoPlayer.setId(FULLSCREEN_ID); // 设置全屏视图的ID// 获取屏幕的宽度和高度WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);int screenWidth = wm.getDefaultDisplay().getWidth();int screenHeight = wm.getDefaultDisplay().getHeight();// 获取视频的宽度和高度int videoWidth = JCMediaManager.instance().currentVideoWidth;int videoHeight = JCMediaManager.instance().currentVideoHeight;FrameLayout.LayoutParams lp;// 根据视频的宽高比设置布局参数和旋转角度if (videoWidth > videoHeight) {// 如果视频宽度大于高度,设置为横屏lp = new FrameLayout.LayoutParams(screenHeight, screenWidth);lp.setMargins((screenWidth - screenHeight) / 2, -(screenWidth - screenHeight) / 2, 0, 0);jcVideoPlayer.setRotation(90); // 旋转90度} else {// 如果视频高度大于或等于宽度,设置为竖屏lp = new FrameLayout.LayoutParams(screenWidth, screenHeight);jcVideoPlayer.setRotation(0); // 不旋转}// 将新的JCVideoPlayer添加到视图中vp.addView(jcVideoPlayer, lp);// 设置视频播放器的参数jcVideoPlayer.setUp(url, JCVideoPlayerStandard.SCREEN_WINDOW_FULLSCREEN, objects);jcVideoPlayer.setUiWitStateAndScreen(currentState); // 设置UI状态和屏幕jcVideoPlayer.addTextureView(); // 添加TextureView// 设置全屏动画final Animation ra = AnimationUtils.loadAnimation(getContext(), R.anim.start_fullscreen);jcVideoPlayer.setAnimation(ra);// 设置视频播放器管理器的监听器JCVideoPlayerManager.setLastListener(this);JCVideoPlayerManager.setListener(jcVideoPlayer);} catch (InstantiationException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}
}

相关文章:

优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案

fm.jiecao:jiecaovideoplayer:x.x.x 优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案&#xff1a; 仅优化关键代码部分&#xff0c;源码&#xff1a; public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …...

aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API

aws(学习笔记第二十七课) 使用aws API Gatewaylambda体验REST API 学习内容&#xff1a; 使用aws API Gatewaylambda 1. 使用aws API Gatewaylambda 作成概要 使用api gateway定义REST API&#xff0c;之后再接收到了http request之后&#xff0c;redirect到lambda进行执行。…...

物联网的三层架构:感知层、网络层与应用层

物联网&#xff08;Internet of Things, IoT&#xff09;作为现代科技的重要组成部分&#xff0c;正在深刻改变我们的生活和工作方式。它将物理世界与数字世界无缝连接&#xff0c;通过智能设备、传感器和网络技术&#xff0c;实现数据的采集、传输和应用。物联网的架构通常分为…...

常用抓包工具tcpdump、Fiddler、Charles、Wireshark 和 Sniffmaster 下载地址

抓包大师官网下载地址 Sniff Master Download - Free TCP and HTTPS Proxy Sniffing Tool, Supports IOS Sniffing Fiddler classic官网下载地址 Download Fiddler Web Debugging Tool for Free by Telerik Fiddler Everywhere官网下载地址 The Ultimate Web Debugging Tool …...

π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当

前言 过去的半个多月 deepseek火爆全球&#xff0c;我对其的解读也成了整整一个系列 详见《火爆全球的DeepSeek系列模型》&#xff0c;涉及对GRPO、MLA、V3、R1的详尽细致深入的解读 某种意义来讲&#xff0c;deepseek 相当于把大模型的热度 又直接拉起来了——相当于给大模…...

js-对象-JSON

JavaScript自定义对象 JSON 概念: JavaScript Object Notation&#xff0c;JavaScript对象标记法. JSON 是通过JavaScript 对象标记法书写的文本。 由于其语法简单&#xff0c;层次结构鲜明&#xff0c;现多用于作为数据载体&#xff0c;在网络中进行数据传输. json中属性名(k…...

Houdini subuv制作输出阵列图

在游戏开发中经常需要用到sheet阵列图&#xff0c;并用其制作翻页动画。通过Houdini强大的节点组合可以配合输出subuv阵列图供游戏引擎使用。 本文出处&#xff1a;https://zhuanlan.zhihu.com/p/391796978 博主参考学习并写该文。 1.在obj分类下创建font节点以进行测试&#…...

虚幻基础17:动画蓝图

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 animation blueprint图表&#xff08;Graph&#xff09;&#xff1a; 编辑动画逻辑。变量&#xff08;Variables&#xff09;&#xff1a; 管理动画参数。函数&#xff08;Functions&#xff09;&#xff1a; 自定义…...

路由器及工作原理与常用路由配置命令详解

一、引言 在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。无论是家庭网络中的多台设备同时上网&#xff0c;还是企业网络中各个部门之间的数据传输和资源共享&#xff0c;都离不开网络设备的支持。路由器作为一种关键的网络设备&#xff0c;在网…...

Windows编程:下载与安装 Visual Studio 2010

本节前言 在写作本节的时候&#xff0c;本来呢&#xff0c;我正在写的专栏&#xff0c;是 MFC 专栏。而 VS2010 和 VS2019&#xff0c;正是 MFC 学习与开发中&#xff0c;可以使用的两款软件。然而呢&#xff0c;如果你去学习 Windows API 知识的话&#xff0c;那么&#xff0…...

R语言 文本分析 天龙八部

起因, 目的: 前面有人对 “倚天屠龙记” 进行分析,我这里只是进行模仿而已。 完整的文件, 已经绑定了,反正读者可以找一下。 案例背景 小说《天龙八部》是金庸先生所著的武侠小说,也是“射雕三部曲”的前传。全书共50章,字数超过一百万字。故事发生在北宋末年,以大理…...

深度学习 Pytorch 建模可视化工具TensorBoard的安装与使用

50 TensorBoard的安装和使用 在深度学习建模过程中&#xff0c;为了能够快速绘制模型基本结构、观察模型评估指标伴随训练过程的动态变化情况&#xff0c;当然也为了能够观察图像数据&#xff0c;我们可以使用TensorBoard工具来进行Pytorch深度学习模型的可视化展示。 Tensor…...

【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据

2007-2019年各省科技支出占一般公共预算支出的比重数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、科技支出占一般公共预算支出的比重 4、范围&#xff1a;31省 5、指标解释&#xff1a…...

19爬虫:使用playwright登录超级鹰

本次案例一共解决了如下两个问题&#xff1a; &#xff08;1&#xff09;如何使用playwright截图&#xff0c;特别是验证码图片 &#xff08;2&#xff09;在playwright中如何判断一个元素可见 1.截图 我们首先解决第一个问题&#xff0c;截图。如果前期接触过selenium的小伙…...

[转]Java面试近一个月的面试总结

本文是在学习中的总结&#xff0c;欢迎转载但请注明出处&#xff1a;http://blog.csdn.net/pistolove/article/details/46753275 前言 打算换个工作&#xff0c;近一个月面试了不少的公司&#xff0c;下面将一些面试经验和思考分享给大家。另外校招也快要开始了&#xff0c;为…...

Spring Boot中使用MockMvc测试PATCH请求控制器

在Spring Boot项目中&#xff0c;对控制器进行单元测试是确保代码质量和功能正确性的重要环节。本文将通过一个具体的例子&#xff0c;展示如何使用Spring的MockMvc框架来测试处理PATCH请求的控制器。 示例项目结构 假设我们有一个简单的Spring Boot项目&#xff0c;其中包含一…...

html转PDF文件最完美的方案(wkhtmltopdf)

目录 需求 一、方案调研 二、wkhtmltopdf使用 如何使用 文档简要说明 三、后端服务 四、前端服务 往期回顾 需求 最近在做报表类的统计项目&#xff0c;其中有很多指标需要汇总&#xff0c;网页内容有大量的echart图表&#xff0c;做成一个网页去浏览&#xff0c;同时…...

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中&#xff0c;IP地址、手机号和手机地址这三个概念如影随形&#xff0c;它们各自承载着网络世界的独特功能&#xff0c;却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语&#xff0c;经常被错误地与手机号地址或手机地址划上等号。本文旨在…...

【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)

搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) jdk-8u361-linux-x64.tarhadoop-3.3.6.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Hadoop+MapReduce+Yarn的详细步骤。 注意: 统一约定将软件安装包存放…...

从零开始:OpenCV 图像处理快速入门教程

文章大纲 第1章 OpenCV 概述 1.1 OpenCV的模块与功能  1.2 OpenCV的发展 1.3 OpenCV的应用 第2章 基本数据类型 2.1 cv::Vec类 2.2 cv&#xff1a;&#xff1a;Point类 2.3 cv&#xff1a;&#xff1a;Rng类 2.4 cv&#xff1a;&#xff1a;Size类 2.5 cv&#xff1a;&…...

从PCB走线到连接器:手把手教你用ADS仿真优化S参数(避坑SI/PI设计)

从PCB走线到连接器&#xff1a;用ADS仿真优化S参数的实战指南 在高速数字电路和射频设计中&#xff0c;S参数就像设计师的"体检报告"&#xff0c;直观反映信号传输路径的健康状况。想象一下&#xff0c;当你设计的PCIe Gen4接口在实验室测试时出现信号完整性问题&am…...

Windows 10/11打印服务总罢工?别急着重装,试试这几招修复Print Spooler自动停止

Windows 10/11打印服务罢工&#xff1f;5种专业修复方案拯救Print Spooler 办公室里最令人抓狂的时刻之一&#xff0c;就是当你急需打印文件时&#xff0c;发现打印机毫无反应。你检查服务管理器&#xff0c;发现那个关键的Print Spooler服务又自动停止了。这种情况在Windows …...

python 中的进制

进制是数值的表示方式&#xff0c;Python 原生支持二进制、八进制、十进制、十六进制&#xff0c;并提供了丰富的进制转换功能。一、进制表示方式1. 四种进制的字面量# 十进制&#xff08;默认&#xff09; dec 42 print(dec) # 42# 二进制&#xff1a;0b 或 0B 前缀 b…...

Windows热键侦探:快速定位热键冲突的终极解决方案

Windows热键侦探&#xff1a;快速定位热键冲突的终极解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经遇…...

V型槽有灰还是镜头花了?三步排查图像模糊的真凶(工地实测版)

夏天的老旧小区弱电井&#xff0c;或者秋天刚刮过西北风的马路边&#xff0c;可以说是装维师傅们的"噩梦主场"。你蹲在逼仄的角落里&#xff0c;熟练地剥线、切割&#xff0c;把光纤小心翼翼地放入机器&#xff0c;按下防风盖。结果伴随着几声急促的"滴滴"…...

怎样高效搭建AI多智能体交易系统:3步快速部署完整方案

怎样高效搭建AI多智能体交易系统&#xff1a;3步快速部署完整方案 【免费下载链接】TradingAgents-AI.github.io TradingAgents: Multi-Agents LLM Financial Trading Framework 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-AI.github.io 想要让AI…...

3分钟搞定Windows和Office永久激活:KMS智能激活工具完整指南

3分钟搞定Windows和Office永久激活&#xff1a;KMS智能激活工具完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗&#xff1f;Office文档突然…...

2025届最火的AI辅助论文方案横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 深寻作为先进的大型语言模型&#xff0c;在学术论文写作领域显现出明显的应用潜力&#xff…...

AUBO机械臂视觉跟踪避坑指南:手眼标定后,如何让末端稳定跟随移动的ArUco码?

AUBO机械臂视觉跟踪避坑指南&#xff1a;手眼标定后如何实现稳定动态跟随 在工业自动化领域&#xff0c;机械臂的视觉跟踪能力直接决定了柔性制造系统的智能化水平。AUBO i5作为国产协作机械臂的代表性产品&#xff0c;其与视觉系统的集成应用越来越广泛。然而&#xff0c;许多…...

Denoiser项目快速入门:5分钟完成语音降噪环境搭建

Denoiser项目快速入门&#xff1a;5分钟完成语音降噪环境搭建 【免费下载链接】denoiser Real Time Speech Enhancement in the Waveform Domain (Interspeech 2020)We provide a PyTorch implementation of the paper Real Time Speech Enhancement in the Waveform Domain. I…...