Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mengimplementasikan pratinjau

Saat menambahkan pratinjau ke aplikasi Anda, gunakan PreviewView, yang merupakan View yang dapat dipangkas, diskalakan, dan diputar untuk memperoleh tampilan yang tepat.

Pratinjau gambar melakukan streaming ke permukaan di dalam PreviewView saat kamera mulai aktif.

Catatan: Jika Anda memerlukan akses langsung ke SurfaceTexture, misalnya untuk melakukan rendering OpenGL, lihat Membuat SurfaceTexture secara Manual.

Menggunakan PreviewView

Mengimplementasikan pratinjau untuk CameraX menggunakan PreviewView melibatkan langkah-langkah berikut, yang dibahas di bagian selanjutnya:

  1. Secara opsional, konfigurasikan CameraXConfig.Provider.
  2. Tambahkan PreviewView ke tata letak Anda.
  3. Minta CameraProvider.
  4. Pada pembuatan View, periksa CameraProvider.
  5. Pilih kamera, lalu lakukan binding untuk siklus proses dan kasus penggunaannya.

Penggunaan PreviewView memiliki beberapa batasan. Saat menggunakan PreviewView, Anda tidak dapat melakukan hal-hal berikut:

  • Membuat SurfaceTexture untuk ditetapkan pada TextureView dan PreviewSurfaceProvider.
  • Mengambil SurfaceTexture dari TextureView dan menetapkannya di PreviewSurfaceProvider.
  • Mendapatkan Surface dari SurfaceView dan menetapkannya di PreviewSurfaceProvider.

Jika salah satu dari hal tersebut terjadi, Preview akan menghentikan frame streaming ke PreviewView.

[Opsional] Mengonfigurasi CameraXConfig.Provider

Jika ingin kontrol yang lebih baik saat CameraX diinisialisasi, Anda dapat mengimplementasikan antarmuka CameraXConfig.Provider di class Application Anda. Perhatikan bahwa sebagian besar aplikasi tidak memerlukan tingkat kontrol ini.

Kotlin

import androidx.camera.camera2.Camera2Config
import androidx.camera.core.CameraXConfig

public class MyCameraXApplication : Application(),  CameraXConfig.Provider {
  override fun getCameraXConfig(): CameraXConfig {
    return Camera2Config.defaultConfig()
  }
}

Java

import androidx.camera.camera2.Camera2Config;
import androidx.camera.core.CameraXConfig;

public class MyCameraXApplication extends Application implements CameraXConfig.Provider {
    @NonNull
    @Override
    public CameraXConfig getCameraXConfig() {
        return Camera2Config.defaultConfig();
    }
}

Menambahkan PreviewView ke tata letak Anda

Contoh berikut menunjukkan PreviewView dalam tata letak:

<FrameLayout
    android:id="@+id/container">
        <androidx.camera.view.PreviewView
            android:id="@+id/previewView" />
</FrameLayout>

Meminta CameraProvider

Kode berikut menunjukkan cara meminta file CameraProvider:

Kotlin

import androidx.camera.lifecycle.ProcessCameraProvider
import com.google.common.util.concurrent.ListenableFuture

class MainActivity : AppCompatActivity() {
    private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
    override fun onCreate(savedInstanceState: Bundle?) {
        cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    }
}

Java

import androidx.camera.lifecycle.ProcessCameraProvider
import com.google.common.util.concurrent.ListenableFuture

public class MainActivity extends AppCompatActivity {
    private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        cameraProviderFuture = ProcessCameraProvider.getInstance(this);
    }
}

Memeriksa ketersediaan CameraProvider

Setelah meminta CameraProvider, verifikasi bahwa inisialisasinya berhasil saat tampilan dibuat. Kode berikut menunjukkan cara melakukannya:

Kotlin

cameraProviderFuture.addListener(Runnable {
    val cameraProvider = cameraProviderFuture.get()
    bindPreview(cameraProvider)
}, ContextCompat.getMainExecutor(this))

Java

cameraProviderFuture.addListener(() -> {
    try {
        ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
        bindPreview(cameraProvider);
    } catch (ExecutionException | InterruptedException e) {
        // No errors need to be handled for this Future.
        // This should never be reached.
    }
}, ContextCompat.getMainExecutor(this));

Untuk contoh fungsi bindPreview yang digunakan dalam sampel ini, lihat kode yang disediakan di Memilih kamera dan melakukan binding siklus proses dan kasus penggunaan.

Memilih kamera dan melakukan binding untuk siklus proses dan kasus penggunaannya

Setelah membuat dan mengonfirmasi CameraProvider, lakukan langkah berikut:

  1. Buat Preview.
  2. Tentukan opsi LensFacing kamera yang diinginkan.
  3. Lakukan binding kamera yang dipilih dan kasus penggunaan dengan siklus proses.
  4. Hubungkan Preview ke PreviewView.

Kode berikut menampilkan contoh:

Kotlin

fun bindPreview(cameraProvider : ProcessCameraProvider) {
    var preview : Preview = Preview.Builder()
            .build()

    var cameraSelector : CameraSelector = CameraSelector.Builder()
          .requireLensFacing(CameraSelector.LENS_FACING_BACK)
          .build()

    preview.setSurfaceProvider(previewView.createSurfaceProvider())

    var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
}

Java

void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {
    Preview preview = new Preview.Builder()
            .build();

    CameraSelector cameraSelector = new CameraSelector.Builder()
            .requireLensFacing(CameraSelector.LENS_FACING_BACK)
            .build();

    preview.setSurfaceProvider(previewView.createSurfaceProvider());

    Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview);
}

Kini Anda telah selesai menerapkan pratinjau kamera. Buat aplikasi dan konfirmasi bahwa pratinjau muncul di aplikasi dan fungsi Anda seperti yang Anda harapkan.

Resource lainnya

Untuk mempelajari lebih lanjut tentang CameraX, lihat referensi tambahan berikut.

Codelab

  • Memulai CameraX
  • Contoh kode

  • Contoh aplikasi CameraX resmi