🎨
SurfaceViewとTextureViewの違い
SurfaceViewとTextureViewの違い【Androidアプリ開発者向け】
Camera2でカスタムカメラ機能を開発する際、SurfaceView
と TextureView
の使い分けで困ったので記事にします。
本記事では、それぞれの特徴と使い分けについて整理します。
SurfaceViewとは
SurfaceView
は、別スレッドで描画されるビューで、主に以下の用途に向いています:
- カメラプレビュー(Camera API, Camera2 API)
- 動画再生(MediaPlayerとの連携)
- ゲームなど描画負荷の高い処理
特徴
- 描画用のSurfaceはUIスレッドと分離されている(パフォーマンスが良い)
- 半透明・回転・アニメーションに非対応
- Viewのレイアウト制御は難しい(Z順の制御がやや制限される)
TextureViewとは
TextureView
は、通常のViewの一部として扱われ、より柔軟な表現が可能です。
特徴
- UIスレッド上で動作
- アルファ、回転、スケーリング、アニメーションが可能
- Viewの中に自由に組み込める(ScrollViewやConstraintLayoutにも対応)
- APIレベル14以降で使用可能
違いのまとめ
観点 | SurfaceView | TextureView |
---|---|---|
描画スレッド | UIスレッドとは別 | UIスレッド上 |
アニメーション対応 | × | |
透明・回転・スケーリング | × | |
パフォーマンス | 高速(特に動画やゲーム) | やや劣る |
使用場面 | カメラ、動画、ゲーム | UIと組み合わせるプレビューや録画 |
どちらを使うべき?
- カメラプレビューのみなら SurfaceView
- プレビュー上にUIを重ねたり、回転・拡大縮小が必要なら TextureView
- 録画しながらエフェクトなどを重ねたい場合は TextureView
まとめ
用途 | 推奨ビュー |
---|---|
シンプルな高速表示(カメラ、動画) | SurfaceView |
UIと統合した柔軟な表示 | TextureView |
今回は画面いっぱいにカメラプレビューを表示したかったのでTextureViewを採用しました。
参考: 公式ドキュメント
Discussion