2014-09-11 79 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); 

將會順利工作