在视频播放时调整/缩小 YouTubePlayerFragment 的大小

2023-12-09

我正在尝试在 Youtube 应用程序中复制视频最小化,如图所示here。为了实现这一目标,我尝试使用可拖动面板图书馆。当我运行示例时,我注意到视频在播放过程中最小化时不会缩放,而是会裁剪。当视频停止(不是暂停)并显示缩略图时,视图会按预期缩放。我在另一个问题上读到 YouTubePlayerView 是用 SurfaceView 实现的。我还在文档中读到,SurfaceView 的行为与普通视图不同,因为它在屏幕上打孔的方式不同。我相信因为 YoutubePlayerView 基于 SurfaceView ,所以它不能正确缩放。如何在播放期间正确缩放 YoutubePlayerView 中播放的视频以匹配其父布局的大小?


根据我使用 YouTubePlayerView 和 YouTubePlayerFragment 的经验,我发现使用 Nineoldandroids 或 ViewPropertyAnimator 进行缩放无法正常工作。为了调整播放视频的大小,您必须以编程方式设置布局参数的高度和宽度。在 DraggablePanel 库中有两个类可以更改顶视图的大小。默认值是 ScaleTransformer,它在播放过程中不适用于视频,因为它会将正在播放的视频的一部分裁剪出视图,另一个是 ResizeTransformer。 ResizeTransformer 不像 ScaleTransformer 那样平滑,但也能起到一定作用。 ResizeTransformer 的问题是,YouTubePlayerView 的布局有时会在拖动时夹在底部视图下方。然后播放会停止,因为它检测到有一个视图与它重叠。我做出了妥协,去掉了 DraggablePanel 并为 YouTubePlayerView 的容器编写了最大化和最小化方法。

public void minimize() {
    RelativeLayout.LayoutParams playerParams =
            (RelativeLayout.LayoutParams) playerView.getLayoutParams();
    playerParams.width = getResources().getDimensionPixelSize(R.dimen.player_minimized_width);
    playerParams.height = getResources().getDimensionPixelSize(R.dimen.player_minimized_height);
    FrameLayout container = (FrameLayout)playerView.getParent().getParent();
    RelativeLayout.LayoutParams containerParams = (RelativeLayout.LayoutParams)container.getLayoutParams();
    containerParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    containerParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    containerParams.bottomMargin = getResources().getDimensionPixelSize(R.dimen.player_minimized_margin);
    containerParams.rightMargin = getResources().getDimensionPixelSize(R.dimen.player_minimized_margin);
    playerView.requestLayout();
    container.requestLayout();
    isMinimized = true;
}

public void maximize() {
    RelativeLayout.LayoutParams playerParams =
            (RelativeLayout.LayoutParams) playerView.getLayoutParams();
    playerParams.width = RelativeLayout.LayoutParams.MATCH_PARENT;
    playerParams.height = getResources().getDimensionPixelSize(R.dimen.player_height);
    FrameLayout container = (FrameLayout)playerView.getParent().getParent();
    RelativeLayout.LayoutParams containerParams = (RelativeLayout.LayoutParams)container.getLayoutParams();
    containerParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,0);
    containerParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,0);
    containerParams.bottomMargin = 0;
    containerParams.rightMargin = 0;
    playerView.requestLayout();
    container.requestLayout();
    isMinimized = false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在视频播放时调整/缩小 YouTubePlayerFragment 的大小 的相关文章

随机推荐

  • 按里面的数字对字符串进行排序

    我想知道如何按字符串中的数字对字符串进行排序 作为例子我有 hello hola d number from database bye adios d number from database again 我想按数字对它们进行排序 即使它发
  • Python 的 Colorama,在 Windows 上不返回彩色打印线

    我已经为 python 安装了 colorama 我已按如下方式导入模块 import colorama from colorama import init init from colorama import Fore Back Style
  • 将 ASP.NET 从版本 1.1 升级到 2.0 - 有任何问题吗?

    我知道我们是really这里落后于时代 但我们即将从 NET 1 1 升级到 NET 2 0 谢谢你的同情 无论如何 有什么我们应该注意的问题吗 在我们开始之前 您有什么一般性建议吗 请不要发帖告诉我直接升级到 3 5 我们只能使用 2 0
  • Flutter - 无法使用灵活的内部填充进行文本换行

    在我的 flutter 应用程序中 我想要一张卡片和四个盒子水平对齐 其内部的宽度和高度相等 代码如下 override Widget build BuildContext context return MaterialApp home S
  • 返回 MS Access 中每组的增量组编号

    我需要帮助在 Access 中创建一个查询 以递增地对行组进行编号 在公共日期进行分组 并在下一个日期保留 组编号 增量 如 结果 列中显示的那样 日期 ID 结果 2017 01 09 809 1 2017 01 09 810 1 201
  • 复杂表合并 javascript 和 jquery 算法

    我有一个相当独特的问题 无法解决 我有一张 2 x 3 的桌子 排列如下图所示 1 2 1 像这样 http jsfiddle net 4zGvg 适用于任意行 列 想法 我们有values矩阵和span矩阵 的价值观span are 0
  • 是否有适用于 .NET(C# 或 VB.NET)的 UPnP 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在开发一个 P2P 应用程序 我需要让它使用 UPnP 通过 NAT 路由器 防火墙进行通信 但是 NET Framework 似乎不包含对 U
  • strftime() 函数显示不正确的时间

    The strftime php 中的函数在我的系统上没有显示正确的时间 我在 xampp 上运行 php 我的电脑时钟大约是 11 点 但功能strftime 当我执行以下代码时返回 19 echo Time is strftime H
  • 释放 Solaris/Linux 中分配的内存

    我编写了一个小程序 并在 Solaris Linux 平台下编译它 以测量将此代码应用于我的应用程序的性能 该程序是这样编写的 最初使用sbrk 0 系统调用 我已经获取了堆区域的基地址 之后我使用分配了 1 5 GB 内存malloc系统
  • R dplyr:使用字符串函数重命名变量

    有点相关的问题 在 dplyr 的重命名函数中以字符串形式输入新列名称 在中间一个dplyr chain gt 我想用旧名称的函数替换多个列名称 使用tolower or gsub etc library tidyr library dpl
  • 在 twilio 中发送短信返回 21603:需要“发件人”号码

    这是一个常规资金帐户 它将坚持没有发件人号码 我也尝试作为请求参数而不是请求正文 SID和TOKEN是正确的 通过修改它们进行测试并获得适当的错误 与 twilio 库配合良好 而不是作为独立的 POST POST 2010 04 01 A
  • Visual Studio Winform 设计器:在当前控件 BindingSource 上设置 DataBindings

    我正在使用 Visual Studio 2013 设计器在 Winforms 中创建 UserControl 它包含一个文本框 我添加了一个 BindingSource 其 DataSource 属性在代码中设置为列表 当我单击文本框时 查
  • 快速写入文件(iOS)

    如何在 Swift 中写入 xml 文档 我有这个代码 let content
  • Python记录器:不会覆盖原始日志?

    因此 当我将以下 x 次复制粘贴到 python 提示符时 它将日志 x 次添加到指定文件的末尾 如何更改代码 以便每次我将其复制粘贴到提示符中时 我只是覆盖现有文件 代码似乎不接受mode w 选项或者我似乎不明白它的含义 def Min
  • 在javascript中设置新窗口的回调函数

    有没有一种简单的方法可以为在 javascript 中打开的新窗口设置 回调 函数 我想从新窗口运行父级的函数 但我希望父级能够设置此特定函数的名称 因此不应在新窗口页面中对其进行硬编码 例如在父级中我有 function DoSometh
  • 将“MediaPlayPause”键发送到应用程序而不将焦点设置到该应用程序

    我正在创建一个程序 它将发送媒体键输入 例如MediaPlayPause MediaNextTrack等 到我有的应用程序IntPtr的 有点像虚拟遥控器 所以经过研究我发现this which almost准确地告诉我如何解决我的问题 然
  • 如何使用 Xpath 获取纯文本

    你好 我得到了这段 html 我想从中获取文本元素 span class h1 Toltec Lighting 216 BRZ 508 Leaf Collection Traditional Potrack With Italian Mar
  • 将 IEEE 浮点十六进制转换为十进制?

    如果我有一个 IEEE 浮点十六进制 42F6E979 如何将其转换为十进制 我相信十进制表示是 123 456001 大多数 汇编语言实际上并没有非常严格地强制执行类型 因此您只需使用该值初始化一个位置 然后将其视为 使用浮点数 最简单的
  • Djs 交互与嵌入分开发送附件

    我试图让我的消息看起来像this 但由于interaction reply I get this反而 这是我的代码 fs readdir pics error files gt if error return console log err
  • 在视频播放时调整/缩小 YouTubePlayerFragment 的大小

    我正在尝试在 Youtube 应用程序中复制视频最小化 如图所示here 为了实现这一目标 我尝试使用可拖动面板图书馆 当我运行示例时 我注意到视频在播放过程中最小化时不会缩放 而是会裁剪 当视频停止 不是暂停 并显示缩略图时 视图会按预期