最近在做Android視頻通話部分的需求,有一個需求是在視屏界面上顯示紅色的方框,
經過一段時間的糾結我發現Android4.0以上有一個控件TextureView,做視頻界面的話剛好合適,
它既可以想SurfaceView那樣渲染視頻,又可以想View一樣對它進行大小,位置,透明度處理,
就和普通的View一樣。TextureView必須在硬件加速的窗口中。
看到這裏,我自然是毫不猶豫的選擇用TextureView,我的感受TextureView確實好用,
渲染視頻的效果我覺得比SurfaceView還好,還能像View一樣進行動畫處理。
對於TextureView的介紹,大家可以看這篇文章TextureView
但是當我想在TextureView上面繪製一些自己的東西的時候發現出問題了!
首先我想跟SurfaceView一樣,調用它的lockCanvas來繪製自己的東西,
結果發現一旦開始播放視頻的時候lockCavans獲取的Canvas就爲null
上網搜索了下,原來問題出在硬件加速上,在硬件加速的情況下,TextureView是用GPU渲染的,
軟件上的Canvas是不能進行處理的,而TextureView必須在硬件加速的窗口中,所以一旦播放視頻的時候是不能獲取到Canvas的。
最後我決定選擇用SurfaceView來做這部分需求,或者想個更好的辦法。