Изменение размера видео при масштабировании/сворачивании YoutubePlayerView в Android

Я следовал руководству по ссылке ниже, чтобы создать функциональность, подобную YouTube, где вид проигрывателя YouTube можно свернуть в правый нижний угол экрана.

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

Однако в настоящее время видео не масштабируется до размера уменьшенного окна и сохраняет исходный размер.

Как я могу обновить YoutubePlayerView, чтобы изменить размер видео при изменении масштаба?

вид.xml:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

        <com.google.android.youtube.player.YouTubePlayerView
            android:id="@+id/youtube_fragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/viewDesc"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            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;
    }

}

переопределенный метод onLayout в моем классе YoutubeVideoView, который расширяет 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);
}

person ajohnston777    schedule 27.07.2014    source источник


Ответы (1)


Я знаю, что это старо, но у меня была аналогичная проблема с использованием DraggablePanel. DraggablePanel основан на ViewDragHelper. Если вы настроите параметры макета высоты и ширины для YouTubePlayerView, воспроизводимое видео также изменится. Я не знаю, почему масштабирование представления не регулирует воспроизводимое видео. Я рассказываю о своем решении подробнее здесь. ResizeTransformer в библиотеке DraggablePanel также вам очень поможет.

person Bropane    schedule 12.11.2014