Android の TextureView と SurfaceView の使い方

Android では、TextureView と SurfaceView はどちらもグラフィックまたは動画を表示するためのビューコンポーネントです。ただし、使い方が少し異なります。

  1. TextureViewを使用してください。
  1. レイアウトファイルに TextureView 要素を追加します。例:
<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
  1. コード内で TextureView の参照を見つけ、 SurfaceTextureListener リスナーを設定します。
TextureView textureView = findViewById(R.id.textureView);
textureView.setSurfaceTextureListener(surfaceTextureListener);
  1. SurfaceTextureListenerインターフェイスを実装し、対応するコールバックメソッド内でTextureViewの状態変更を処理する。
SurfaceTextureListener surfaceTextureListener = new SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
// SurfaceTexture已经可用,可以进行相应的操作
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) {
// SurfaceTexture的尺寸发生变化,可以调整相应的布局
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
// SurfaceTexture被销毁,可以释放相应的资源
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
// SurfaceTexture更新,可以进行相应的操作
}
};
  1. SurfaceViewを使用する:
  1. レイアウトファイルに “ 要素を追加しました。
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
  1. コード内で見つかったSurfaceView参照からSurfaceHolderオブジェクトを取得します:
SurfaceView surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
  1. SurfaceViewの状態変化を処理するSurfaceHolder.Callbackコールバックオブジェクトを設定する
surfaceHolder.addCallback(surfaceHolderCallback);
  1. SurfaceHolder.Callbackインターフェースを実装し、該当するコールバックメソッドでSurfaceViewの状態変化を処理します。
SurfaceHolder.Callback surfaceHolderCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
// SurfaceView已经创建,可以进行相应的操作
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// SurfaceView的尺寸或格式发生变化,可以调整相应的布局
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// SurfaceView被销毁,可以释放相应的资源
}
};

テクスチャビューかサーフェスビューを使うかは、ご自身のロジックをそれぞれのコールバックメソッドに実装する必要があります(画像を描画したり、ビデオを再生したりなど)。また、サーフェスビューはマルチスレッドで描画するときに有利ですが、テクスチャビューは他のビューと混在させて描画する時により柔軟に機能します。適するビューコンポーネントを、具体的なニーズに合わせて選択しましょう。

コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds