在android中缩放/最小化YoutubePlayerView时调整视频大小

Posted

技术标签:

【中文标题】在android中缩放/最小化YoutubePlayerView时调整视频大小【英文标题】:Resize video when scaling/minimizing YoutubePlayerView in android 【发布时间】:2014-07-27 10:30:00 【问题描述】:

我按照下面链接中的教程创建了类似 YouTube 的功能,其中 YouTube 播放器视图可以最小化到屏幕的右下角。

http://flavienlaurent.com/blog/2013/08/28/each-navigation-drawer-hides-a-viewdraghelper/

但是,视频当前没有缩放到缩小窗口的大小并保留原始大小。

如何更新 YoutubePlayerView 以更改视频的大小以随缩放而变化?

view.xml:

<FrameLayout
    android:id="@+id/container"
    android:layout_
    android:layout_ >

    <com.example.views.YoutubeVideoView
        android:id="@+id/youtubeLayout"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:visibility="visible" >

        <com.google.android.youtube.player.YouTubePlayerView
            android:id="@+id/youtube_fragment"
            android:layout_
            android:layout_ />

        <TextView
            android:id="@+id/viewDesc"
            android:layout_
            android:layout_
            android:background="#FF00FF"
            android:gravity="center"
            android:tag="desc"
            android:text="Loreum Loreum"
            android:textColor="@android:color/white"
            android:textSize="35sp" />
    </com.example.views.YoutubeVideoView>
</FrameLayout>

DragHelperCallback 包含在我的 YoutubeVideoView 类中,它扩展了 ViewGroup:

private class DragHelperCallback extends ViewDragHelper.Callback 

    @Override
    public boolean tryCaptureView(View child, int pointerId) 
        return child == mVideoView;
    

    @Override
    public void onViewPositionChanged(View changedView, int left, int top,
            int dx, int dy) 
        mTop = top;

        mDragOffset = (float) top / mDragRange;

        mVideoView.setPivotX(mVideoView.getWidth());
        mVideoView.setPivotY(mVideoView.getHeight());
        mVideoView.setScaleX(1 - mDragOffset / 2);
        mVideoView.setScaleY(1 - mDragOffset / 2);
        mDescView.setAlpha(1 - mDragOffset);

        requestLayout();
    

    @Override
    public void onViewReleased(View releasedChild, float xvel, float yvel) 
        int top = getPaddingTop();
        if (yvel > 0 || (yvel == 0 && mDragOffset > 0.5f)) 
            top += mDragRange;
        
        mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top);
    

    @Override
    public int getViewVerticalDragRange(View child) 
        return mDragRange;
    

    @Override
    public int clampViewPositionVertical(View child, int top, int dy) 
        final int topBound = getPaddingTop();
        final int bottomBound = getHeight() - mVideoView.getHeight()
                - mVideoView.getPaddingBottom();

        final int newTop = Math.min(Math.max(top, topBound), bottomBound);
        return newTop;
    


在我的 YoutubeVideoView 类中重写了 onLayout 方法,它扩展了 ViewGroup

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) 
    mDragRange = getHeight() - mVideoView.getHeight();

    mVideoView.layout(0, mTop, r, mTop + mVideoView.getMeasuredHeight());

    mDescView
            .layout(0, mTop + mVideoView.getMeasuredHeight(), r, mTop + b);

【问题讨论】:

【参考方案1】:

我知道这很旧,但我在使用 DraggablePanel 时遇到了类似的问题。 DraggablePanel 基于 ViewDragHelper。如果您调整 YouTubePlayerView 的高度和宽度布局参数,播放视频也会随之调整。我不知道为什么缩放视图不会调整正在播放的视频。我更多地谈论我的解决方案here。 DraggablePanel 库中的ResizeTransformer 也会对您有很大帮助。

【讨论】:

以上是关于在android中缩放/最小化YoutubePlayerView时调整视频大小的主要内容,如果未能解决你的问题,请参考以下文章

Android YouTube 播放器直播

百度地图android开发能不能让地图一开始显示的就是最小的缩放状态

在模态 ViewController 中禁用缩放和最小化

在传单中获取WMS的最小缩放级别

防止在 UIScrollView 的最大/最小缩放时重绘屏幕

您是不是对训练和测试数据分别应用最小最大缩放?