在Android的视频视频中缩放视频

时间:2015-01-14 23:55:43

标签: android android-videoview

我知道如何拉伸ViewVideo以适应屏幕。 但MX Player允许更大的视频。 视频几乎比屏幕大。 所以观众会看到视频的裁剪部分。

Android的VideoView可以制作这样的技巧吗?

1 个答案:

答案 0 :(得分:2)

我认为你不能只用常规的VideoView来做这件事......虽然我能用更复杂的方法做到这一点。

TLDR:您需要创建一个与VideoView类似的自定义视图,但它基于TextureView而不是SurfaceView,并为此视图设置正确的变换矩阵。

TLDR编辑:请先查看我的回答编辑,因为您实际上可以使用VideoView进行此操作...

创建此视图有点棘手,主要是因为MediaPlayer事件可以在不同的设备上以不同的顺序触发,也可以播放不同的视频。

基本理念是:

  • 创建扩展View
  • 的自定义TextureView
  • 保留一个MediaPlayer对象来管理整个播放视频的内容......例如视图的字段
  • 使用TextureListener
  • 设置您的观看setSurfaceTextureListener()
  • TextureListener个方法内部(onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height)内部更具体)创建一个带有构造函数的新Surface

Surface surface = new Surface(surfaceTexture);
  • 并将此表面设置为MediaPlayer的表面,其中包含:

mMediaPlayer.setSurface(surface);

这个变换矩阵的创建可能看起来像这样(示例来自我的旧代码,如果我没记错的话,将视频拟合到视图的高度裁剪剩下的所有东西):

float scaleY = 1.0f;
float scaleX = (mVideoWidth * mViewHeight / mVideoHeight) / mViewWidth;

int pivotPointX = (int) (mViewWidth / 2);
int pivotPointY = (int) (mViewHeight / 2);

Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY, pivotPointX, pivotPointY);

setTransform(matrix);

编辑:

嗯......当我再次考虑它时,也许你只能通过常规VideoView来实现这一点。只需按照与scaleXscaleYpivotPointXpivotPointY计算相似的方法,并为SurfaceView的基础VideoView设置这些值使用方法setScaleX()setScaleY()setPivotX()setPivotY(),看看它是否有效。如果您测试它,请告诉我它是否有效。