【问题标题】:Resize/Scaling down a YouTubePlayerFragment while video is playing在播放视频时调整/缩小 YouTubePlayerFragment
【发布时间】:2015-01-05 23:03:09
【问题描述】:

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

【问题讨论】:

  • 嗨。你有解决办法吗?

标签: android youtube-api android-mediaplayer surfaceview android-videoview


【解决方案1】:

根据我使用 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;
}

【讨论】:

  • 此解决方案是否包括拖动?你是如何使用它的?有任何 Activity 类演示它的用途吗?谢谢。
  • 请添加示例
  • 不包含所有滚动状态位置。仅用于最大值和最小值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多