我在SurfaceView中播放視頻。當我縮放surfaceView時,它的座標是正確縮放的,但正在播放的視頻內容不是。當SurfaceView縮放時視頻不能縮放
我使用ViewHelper.setscaleX方法縮放視圖。 我嘗試了幾件事,但無法縮放視頻..如果我改變參數,然後視頻正確縮放。但是這使得過渡變得緩慢。 請查看初始視頻和最終視頻的快照(縮放後)。
我在SurfaceView中播放視頻。當我縮放surfaceView時,它的座標是正確縮放的,但正在播放的視頻內容不是。當SurfaceView縮放時視頻不能縮放
我使用ViewHelper.setscaleX方法縮放視圖。 我嘗試了幾件事,但無法縮放視頻..如果我改變參數,然後視頻正確縮放。但是這使得過渡變得緩慢。 請查看初始視頻和最終視頻的快照(縮放後)。
解決它。使用TextureView而不是SurfaceView。動畫不適用於surfaceview。使用此鏈接播放視頻使用紋理視圖:Playing video on TextureView
請注意,TextureView將消耗更多的電池比SurfaceView,因爲它使用OpenGL繪製視頻,而SurfaceView可以使用硬件覆蓋(如果可用)。
正如其他人在評論中說的,你可以通過修改你的視圖的layoutParams來實現你想要的。
''layoutParams'比'setScale ...'消耗更多的CPU,所以動畫將會以非常低的fps – oleynikd 2016-05-21 22:35:50
如果你必須堅持使用SurfaceView,因爲你使用的是第三方庫或者是什麼,解決方法是使用縮放動畫縮放它,並在動畫完成後,通過給定的方式更新SurfaceView的佈局佈局正確的大小和位置。這並不完美,但應該對那些沒有其他選擇的人有好處。
添加的透視圖像相對佈局的surfaceview以上,並添加在該透明視圖scalegesture檢測器,並且當縮放發生只是surfaceview或textureview執行縮放。
讓我們假設透明視圖名爲videoview
。
Videoview.setOnClicklistner();
,並進行縮放時執行該scalefactor
到surfaceview
像
Surfaceview.setscaleX(scalefactor);
Surfaceview.setscaleY(scalefactor);
將會順利工作
「如果我改變PARAMS然後」 PARAMS?什麼參數? – pskink 2014-09-11 12:50:30
視圖的LayoutParams,改變視圖的寬度和高度。 – sanjeev 2014-09-11 12:59:32
爲了調整大小SurfaceView表面的一個例子,請參見在AspectFrameLayout Grafika(https://github.com/google/grafika/blob/master/src/com/android/grafika/AspectFrameLayout.java)。它的使用有調整大小以匹配視頻播放的寬高比,但應該是可適應的。 – fadden 2014-09-12 06:17:05