发布时间:2026/9/6 23:33:34
GSYVideoPlayer 比例适配:5 种模式怎么选、怎么接 GSYVideoPlayer 比例适配5 种模式怎么选、怎么接【免费下载链接】GSYVideoPlayerVideo players (IJKplayer, ExoPlayer, MediaPlayer), HTTPS, 16k page size, danmaku (bullet chat) support, external subtitles, support for filters, watermarks, and GIF screenshots, pre-roll and mid-roll ads, multiple simultaneous playback, basic seeking/dragging, volume and brightness adjustment, play-while-cache support项目地址: https://gitcode.com/GitHub_Trending/gs/GSYVideoPlayerGSYVideoPlayer 的视频比例适配只依赖一行静态调用GSYVideoType.setShowType()即可在 5 种比例模式之间切换无需改布局、无需动渲染层。场景类型推荐模式一句话理由典型 App 举例短视频信息流SCREEN_TYPE_DEFAULT竖屏源保比例上下留边观感自然抖音、快手影视详情页SCREEN_TYPE_16_9宽屏源与横屏容器最贴合爱奇艺、腾讯视频体育赛事 / 直播SCREEN_TYPE_FULL无黑边裁掉两侧不影响观感虎扑直播、央视频老视频 / 教学录播SCREEN_TYPE_4_3传统比例源不二次裁剪网课平台、档案馆监控墙 / 广告位SCREEN_MATCH_FULL必须铺满固定坑位变形可接受安防 App、开屏广告比例适配之所以比设个参数复杂核心矛盾有两个。第一setShowType()写入的是静态全局变量RecyclerView 里 N 个播放器实例共享同一个值后绑定的 item 会直接改写前一个实例下次测量读到的比例第二全屏是独立创建的播放器实例窗口态的比例状态不会自动传递过去旋转屏幕后比例会悄悄回退。一行代码切换比例的调用机制setShowType(int type)的签名极简但它不是实例方法而是写类级静态字段TYPE/** * 设置显示比例,注意这是全局生效的 */ public static void setShowType(int type) { TYPE type; }设置对当前活跃播放器的生效时机是下一次测量渲染层的MeasureHelper.doMeasure()在onMeasure时读取GSYVideoType.getShowType()据此计算 TextureView 的目标宽高。所以改完比例后要让正在播放的实例立即生效需要补一次changeTextureViewShowType()加requestLayout()Demo 的resolveTypeUI()就是这么做的。另外注意GSYVideoType没有reset()方法所谓复位就是重新调用setShowType(GSYVideoType.SCREEN_TYPE_DEFAULT)。5 种模式在测量层的差异一次看全常量名视觉效果是否裁剪是否变形适用端SCREEN_TYPE_DEFAULT保持原始宽高比容器侧留黑边否否全端SCREEN_TYPE_16_9按 16:9 出画面源不符时留边否否宽屏源为主SCREEN_TYPE_4_3按 4:3 出画面宽屏设备上两侧黑边明显否否老视频源SCREEN_TYPE_FULL铺满容器超出部分裁掉是否横屏全屏SCREEN_MATCH_FULL强制拉伸到容器宽高是是特殊坑位两种最值得展开理解的模式全屏裁减SCREEN_TYPE_FULL测量时按高度撑满或宽度撑满取较大方向计算超出容器的边缘直接裁掉。源码注释明确建议surface_container用 FrameLayout 作父布局否则裁减后的画面位置会偏移。适合对画面边缘不敏感的体育赛事、演唱会直播是沉浸式全屏的主力模式。mMoreScale.setText(全屏); GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL);默认比例SCREEN_TYPE_DEFAULTMeasureHelper直接按视频真实宽高含 SAR 修正计算容器装不下时上下或左右留黑边不裁不拉。它是唯一在getTextureParams()里让渲染层走MATCH_PARENT的模式也是多实例共存时最安全的基线。其余三种SCREEN_TYPE_16_9与SCREEN_TYPE_4_3逻辑相同只是目标比例固定非等比源会在对应方向留边SCREEN_MATCH_FULL直接把测量结果写成容器全宽全高画面必然变形只建议给监控、广告这类必须铺满的坑位。从布局到全屏同步的完整走读下面按执行顺序走一遍完整链路。先放最小布局。比例裁减模式下surface_container的父容器建议是 FrameLayoutFrameLayout android:layout_widthmatch_parent android:layout_height200dp com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer android:idid/detail_player android:layout_widthmatch_parent android:layout_heightmatch_parent / /FrameLayout初始化后先定初始比例。这里把当前比例存进实例字段mType后面全屏同步要复用它int mType 1; // 对应 SCREEN_TYPE_16_9 mMoreScale.setOnClickListener(v - { mType (mType 1) % 5; resolveTypeUI(); });resolveTypeUI()里做两件事调静态方法改全局值再通知当前实例立即重测private void resolveTypeUI() { if (mType 1) { GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_16_9); } // ... 其余分支同 Demo changeTextureViewShowType(); if (mTextureView ! null) mTextureView.requestLayout(); }最后一步是关键覆写startWindowFullscreen()把比例状态搬进全屏播放器。全屏窗口是另一个实例它启动时会按全局值重新测量但按钮文案和mType是自己的字段不同步就会出现画面是对的、按钮显示默认比例的状态漂移Override public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) { SampleVideo sampleVideo (SampleVideo) super.startWindowFullscreen(context, actionBar, statusBar); sampleVideo.mType mType; sampleVideo.resolveTypeUI(); return sampleVideo; }SampleVideo.java 的startWindowFullscreen()与resolveNormalVideoShow()就是这条链路的完整参考实现退出全屏时反向回写一次mType。如果不做这两处同步用户旋转屏幕进入全屏后比例会回退到默认按钮文案也会和实际画面不一致。边界问题清单比例改动波及所有实例 →setShowType()是静态方法写的是类字段 → 每个实例开播前显式重设一次。列表滚动时比例被后续 item 覆盖 → RecyclerView 复用导致后绑定实例改写全局值 →onBindViewHolder中按 position 重设。自定义播放器比例不生效或布局错位 → 默认实现只改GSYRenderView容器 → 重写changeTextureViewShowType()落到自定义布局。全屏旋转后比例回退 → 全屏实例字段独立未继承窗口态的mType→startWindowFullscreen中同步并resolveTypeUI()。全屏退出后窗口播放器状态丢失 → 回写逻辑缺失 →resolveNormalVideoShow中反向同步。收束与延伸阅读比例适配的本质是两件事选对模式管好作用域。模式决定了测量公式作用域决定了这个静态值在窗口、全屏、列表复用之间如何流转。setShowType()负责前者startWindowFullscreen里的状态同步负责后者两者缺一就会出现黑边错位或比例回退。延伸阅读USE.md 中切换比例章节覆盖全部比例模式与常用组合GSYVIDEO_PLAYER_PROJECT_INFO.md 播放器整体架构理解渲染层如何消费比例值GSYVideoType.java 常量定义与setScreenScaleRatio自定义比例入口如果你的项目已经在自定义播放控件上投入较多下一个值得看的问题是如何在完全自绘的控件体系里让比例按钮和手势旋转共享同一份状态机。【免费下载链接】GSYVideoPlayerVideo players (IJKplayer, ExoPlayer, MediaPlayer), HTTPS, 16k page size, danmaku (bullet chat) support, external subtitles, support for filters, watermarks, and GIF screenshots, pre-roll and mid-roll ads, multiple simultaneous playback, basic seeking/dragging, volume and brightness adjustment, play-while-cache support项目地址: https://gitcode.com/GitHub_Trending/gs/GSYVideoPlayer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/9/7 0:03:37

2026 AI视觉与物联网开发板选购指南:从MCU到Jetson的档位解析

2026 年已经过了一大半,如果你现在正准备入手 AI 视觉或物联网开发板,我建议你先别急着下单。市面上从几十块的 ESP32 到几千块的英伟达 Jetson,价格差了近百倍,宣传话术却几乎一样,都告诉你“能跑 AI、能做视觉、能搞…

2026/9/7 0:03:37

基于Vue的企业门户网站管理系统的设计与实现

目 录 摘 要 Abstract 目 录 1 引言 1.1 选题背景 1.2 研究现状 1.3 目的和意义 1.4 论文结构安排 1.5本章小结 2 开发环境与技术 2.1 MySQL数据库 2.2 Java语言技术 2.3 Spring Boot框架 2.4 Vue.js 2.5 本章小节 3 系统分析 …

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/6 23:58:36

S698-T处理器上RTEMS移植与开发实战

简介:文档围绕S698-T处理器上的RTEMS实时操作系统移植与应用程序开发展开,定位为航天嵌入式领域的专业技术文献,适合嵌入式实时系统开发者、航天器电子系统工程师及相关专业研究生阅读参考。文档以构建星载计算机模型为背景,论证了…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/7 0:14:19

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/7 0:14:17

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…