- •12.1 Введення
- •12.2 Створення додатка
- •12.3 Налаштування інтерфейсу та реалізація логіки активності для роботи з камерою
- •Int width, int height);
- •12.4 Налаштування інтерфейсу та реалізація логіки активності для відтворення аудіо та відео
- •12.6 Налаштування інтерфейсу та реалізація логіки головною активності додатки
Int width, int height);
public void surfaceDestroyed (SurfaceHolder holder);
Ми реалізуємо метод surfaceCreated (), що залишилися два методу запишемо з порожньою реалізацією.
У методі surfaceCreated () задамо вікно попереднього перегляду:
camera.setPreviewDisplay (holder);
Виконаємо необхідні настройки вікна попереднього перегляду (див. Лістинг 12.1).
Запустимо відображення вікна попереднього перегляду:
camera.startPreview ();
Прийшов час обговорити і реалізувати знімки можна робити. Для того, щоб зробити знімок необхідно викликати метод takePicture (). Виклик цього методу можна виконати з методу-обробника події натискання кнопки, тоді при натисканні на кнопку відразу буде отримана фотографія, а можна "розтягнути задоволення" і скористатися попередньою автофокусуванням.
Спочатку инициализируем кнопку і додамо слухача події натискання в методі onCreate () активності:
shotBtn = findViewById (R.id.bCameraShot);
shotBtn.setOnClickListener (new MyViewListener ());
В даному випадку слухачем є екземпляр внутрішнього класу MyViewListener, який реалізує інтерфейс View.OnClickListener.
class MyViewListener implements View.OnClickListener {
@Override
public void onClick (View v) {
if (v == shotBtn) {
camera.autoFocus (new MyAutoFocusCallback ());
}
}
}
У методі onClick () викликаємо обробник автофокусу, слухачем події автофокусування в даному випадку є екземпляр внутрішнього класу MyAutoFocusCallback, який реалізує інтерфейс Camera.AutoFocusCallback.
class MyAutoFocusCallback implements Camera.AutoFocusCallback {
@Override
public void onAutoFocus (boolean paramBoolean, Camera
paramCamera) {
if (paramBoolean) {
// якщо вдалося сфокусуватися, робимо знімок
paramCamera.takePicture (null, null, null,
new MyPictureCallback ());
}
}
}
Метод takePicture () має чотири параметри:
Camera.ShutterCallback shutter - викликається в момент отримання зображення з матриці;
Camera.PictureCallback raw - програмі передаються для обробки raw дані (якщо підтримується апаратно);
Camera.PictureCallback postview - програмі передаються повністю оброблені дані (якщо підтримується апаратно);
Camera.PictureCallback jpg - програмі передається зображення в форматі jpg. Тут може бути організована запис зображення на карту пам'яті.
У нашому випадку останнім параметром є екземпляр класу MyPictureCallback (), який реалізує інтерфейс Camera.PictureCallback. В цьому класі реалізований єдиний метод (див. Лістинг 12.1):
public void onPictureTaken (byte [] paramArrayOfByte, Camera paramCamera) {...}
У лістингу 12.1 представлений код активності, що реалізує роботу з камерою і дозволяє виконувати знімки.
Щоб дозволити програмі працювати з камерою і зберігати фотографії на карті пам'яті, в маніфест необхідно додати наступні дозволи:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
