1

我正在使用Exoplayer库来创建视频播放器应用程序。我正在尝试制作像 youtube 这样的功能:将视频播放器拖到底部,我将被缩放到更小的尺寸。为此,我使用了 ViewDragHelper。当播放器拖动时,我将其缩放如下:

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

            mDragOffset = (float) top / mDragRange;

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

            mDescView.setAlpha(1 - mDragOffset);
            requestLayout();
        } 

mVideoView是一个SurfaceView, 并且播放器会SurfaceView渲染它的内容。比例正确,SurfaceView但内容不正确。

问题:如何缩放 SurfaceView 及其内容?

4

4 回答 4

8

最后,我为我的问题找到了解决方案。我TextureView改用了SurfaceView,现在效果很好。

于 2015-05-14T01:26:13.273 回答
4

您可以使用TextureView而不是SurfaceView这样:

<com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/play_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:surface_type="texture_view"/>
于 2018-11-16T06:59:13.603 回答
0

作为答案有点晚了,但另一种解决方案是用 FrameLayout 包装 SurfaceView。然后修改布局参数或FrameLayout的正确属性,而不是直接修改SurfaceView。

注意:也可以使用自定义布局,在某些情况下可能是更好的方法。

于 2016-10-25T16:06:11.393 回答
0

如果您因为使用第三方库或诸如此类而不得不坚持使用 SurfaceView,则一种解决方法是使用缩放动画将其缩小,并且在动画完成后,通过提供正确的大小来更新 SurfaceView 的布局参数和位置到缩放位置的位置。它并不完美,但应该对那些别无选择的人有好处。

于 2017-07-16T08:22:04.653 回答