2012-05-28 24 views
10

Trên một số thiết bị, onPreviewFrame không được gọi nếu không có SurfaceView được đặt để hiển thị xem trước máy ảnh. Tuy nhiên, tôi xử lý máy ảnh trong một dịch vụ, vì vậy tôi không thể đặt số SurfaceView nhưng tôi không muốn có bản xem trước hiển thị.Android: onPreviewFrame không bao giờ được gọi mà không có SurfaceView

Làm cách nào để thực hiện điều này? Tôi có thể lập trình tạo một SurfaceView và đặt nó với Camera::setPreviewDisplay không?

Điều này phải có khả thi hay không?

Nó hoạt động trên hầu hết các điện thoại mà không có một SurfaceView nhưng không phải trên HTC One X và Google Nexus One ...

Trả lời

4

Theo this question, tạo ra một SurfaceView trong mã hoạt động tốt. Mặc dù tôi không nghĩ rằng bạn có thể tạo nó thông qua một dịch vụ.

Cách tiếp cận khác là tạo 1px-1px SurfaceView bên trong một RelativeLayout và ẩn nó với một số chế độ xem khác ở trên đầu trang. (mức hiển thị vẫn phải là VISIBLE). Chúng tôi sử dụng mẹo này cho giao diện người dùng máy ảnh Path nơi chúng tôi hiển thị bộ đệm xem trước thông qua OpenGL và nó hoạt động tốt.

1

Theo tài liệu dễ cấu hình, chế độ xem bề mặt có thể nhìn thấy và hiển thị là cần thiết để kích hoạt xem trước máy ảnh. Nó có thể được che phủ mặc dù

0

Từ API 11 trở đi, bạn có thể sử dụng SurfaceTexture thay vì SurfaceView để tải khung hình từ máy ảnh. Sau đó, thay vì sử dụng Camera.setPreviewDisplay, chỉ cần sử dụng Camera.setPreviewTexture.

This câu trả lời cũng như this one thảo luận về điểm này.

Các vấn đề liên quan