在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开发能不能让地图一开始显示的就是最小的缩放状态