У меня есть приложение, в котором клиент использует камеру для съемки. Предварительный просмотр изображения отображается на планшете с помощью SurfaceView, прежде чем пользователь нажмет кнопку «кликнуть». Когда человек нажимает кнопку клика, вызывается метод onPictureTaken, и в этом методе я сохраняю изображение, а также вызываю метод camera.stopPreview() (чтобы пользователь мог видеть снимок, который был сделан).Android (Camera) - Как синхронизировать stopPreview() с onPictureTaken()?
Существует проблема, однако ... Если пользователь перемещается по планшету в тот момент, когда снимок сделан, неподвижное изображение, фактически показанное после вызова метода stopPreview, НЕ соответствует тому, что я войдите в массив байтов метода onPictureTaken. Существует задержка в несколько милисекунд, в которой это различие выделяется, когда пользователь перемещается по планшету непосредственно перед съемкой (я знаю, что 99% людей не будут перемещать планшет во время съемки, но мой клиент действительно заметил эту проблему и исправил ее ...). Я попытался переместить операцию сохранения в поток separete, как показано ниже, поэтому метод onPictureTaken может выполняться как можно быстрее. Тем не менее, это не имело никакого эффекта на всех ...
private PictureCallback pictureCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
camera.stopPreview();
reference = data;
new PictureCallbackHeavy().execute();
}
};
Я также trield называть camera.stopPreview(), прежде чем я вызвать метод takePicture (а не внутри метода onPictureTaken()). Но результат тот же.
Что я могу сделать, чтобы синхронизировать метод stopPreview, чтобы я мог ТОЛЬКО показать изображение, которое было выполнено, и что находится в массиве байтов обратного вызова onPictureTaken()?
Благодарим вас заранее! =)
какие операции вы делаете в 'новом PictureCallbackHeavy() выполнить()'? –