2014-09-11 646 views
5

我在SurfaceView中播放视频。当我缩放surfaceView时,它的坐标是正确缩放的,但正在播放的视频内容不是。当SurfaceView缩放时视频不能缩放

我使用ViewHelper.setscaleX方法缩放视图。 我尝试了几件事,但无法缩放视频..如果我改变参数,然后视频正确缩放。但是这使得过渡变得缓慢。 请查看初始视频和最终视频的快照(缩放后)。

initial video with surface view scale 1

video after surfaceView is scaled. See at the bottom-right

+1

“如果我改变PARAMS然后” PARAMS?什么参数? – pskink 2014-09-11 12:50:30

+0

视图的LayoutParams,改变视图的宽度和高度。 – sanjeev 2014-09-11 12:59:32

+0

为了调整大小SurfaceView表面的一个例子,请参见在AspectFrameLayout Grafika(https://github.com/google/grafika/blob/master/src/com/android/grafika/AspectFrameLayout.java)。它的使用有调整大小以匹配视频播放的宽高比,但应该是可适应的。 – fadden 2014-09-12 06:17:05

回答

1

请注意,TextureView将消耗更多的电池比SurfaceView,因为它使用OpenGL绘制视频,而SurfaceView可以使用硬件覆盖(如果可用)。

正如其他人在评论中说的,你可以通过修改你的视图的layoutParams来实现你想要的。

+1

''layoutParams'比'setScale ...'消耗更多的CPU,所以动画将会以非常低的fps – oleynikd 2016-05-21 22:35:50

0

如果你必须坚持使用SurfaceView,因为你使用的是第三方库或者是什么,解决方法是使用缩放动画缩放它,并在动画完成后,通过给定的方式更新SurfaceView的布局布局正确的大小和位置。这并不完美,但应该对那些没有其他选择的人有好处。

0

添加的透视图像相对布局的surfaceview以上,并添加在该透明视图scalegesture检测器,并且当缩放发生只是surfaceview或textureview执行缩放。

让我们假设透明视图名为videoview

Videoview.setOnClicklistner(); 

,并进行缩放时执行该scalefactorsurfaceview

Surfaceview.setscaleX(scalefactor); 
Surfaceview.setscaleY(scalefactor); 

将会顺利工作