2011-06-29 23 views
8

Tôi đã quản lý để viết trình phát video có giới hạn có thể xem tệp .3gp từ internet. Video sẽ được hiển thị ở giữa toàn màn hình, duy trì tỷ lệ khung hình của video. Ngoài ra, các phép quay không làm gián đoạn video, video tiếp tục phát mà không gặp sự cố.Tránh tham nhũng Android VideoView khi quay lại ảnh chân dung

Mọi thứ có vẻ tốt, nhưng ... trên HTC Legend của tôi khi bạn xoay trở lại chân dung, video bị hỏng và thay vì hiển thị toàn màn hình, nó được hiển thị ở kích thước pixel gốc. Nhưng quay lại các tác phẩm cảnh quan và được hiển thị một cách hoàn hảo. Bất kỳ ý tưởng tại sao? Thật không may tôi không có nhiều phần cứng để kiểm tra điều này và tôi đã hết ý tưởng để kiểm tra.

Bạn có thể lấy mã nguồn ví dụ đầy đủ từ https://github.com/gradha/Android-video-stream-rotation. Đây là những ảnh chụp màn hình của tôi khi mở ứng dụng, xoay sang phong cảnh, chạm vào màn hình để hiển thị các điều khiển video, sau đó xoay trở lại chân dung để xem tham nhũng. video started ok in portrait

on landscape the video works fine too

but now going back to portrait always shows corruption

Trả lời

2

Trong mã nguồn tại https://github.com/gradha/Android-video-stream-rotation. bạn thêm bình luận:

Kể từ khi chúng tôi xác định trong AndroidManifest.xml rằng chúng tôi muốn xử lý riêng của chúng tôi hướng thay đổi, chúng tôi thay đổi kích thước màn hình trong chức năng là bức chân dung hay phong cảnh .

Từ mã nguồn AndroidManifest.xml

android:configChanges="orientation|screenSize" 

Vì vậy, nếu bạn thêm thuộc tính này để các yếu tố hoạt động trong biểu hiện, tôi sẽ giải thích rằng khi hoạt động sẽ xử lý tất cả những thay đổi định hướng? không phải bạn?

Từ Android Developers

Để tuyên bố rằng hoạt động của bạn xử lý một sự thay đổi cấu hình, chỉnh sửa các yếu tố hoạt động thích hợp trong file manifest của bạn để bao gồm các android: thuộc tính configChanges ... more

Vì vậy, bạn nên không cần phải:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

Tôi tạo ra một dự án thử nghiệm để kiểm tra xem đây là trường hợp:

Rotating Video Stream Ví dụ: https://github.com/TouchBoarder/RotatingVideoStream

Kết luận của tôi: Tôi không cần phải overide các "onConfigurationChanged" trong hoạt động để hiển thị video chính xác ở cả dọc và ngang và video tiếp tục phát trên các thay đổi xoay.

Hãy thoải mái cải thiện và sử dụng mã :)

+0

Kết luận của bạn sai: Nếu tôi xóa phương thức đó thì video vẫn hiển thị tham nhũng video. OTOH ví dụ của bạn hoạt động trên thiết bị của tôi, vì vậy thủ phạm là một nơi khác. Nếu tôi tìm thấy thời gian tôi sẽ tìm kiếm những thay đổi khác giữa cả hai dự án. –

+0

Đánh dấu câu trả lời của bạn là chính xác cho việc cung cấp liên kết bị thiếu. –

+1

Nếu bạn đang nhắm mục tiêu android> = 13, bạn phải đặt android: configChanges = "orientation | screenSize" bên cạnh chỉ android: configChanges = "orientation" – jonathanrz

0

Tắt toàn bộ trường hợp thử nghiệm của tôi là sai.Ngay cho đến the commit where I blame the easy videoview example on being wrong mọi thứ đều theo sách. Tuy nhiên tôi quên dòng android:configChanges="orientation", và thêm dòng này trên đầu trang của cam kết đã đề cập trước đó làm cho tất cả mọi thứ làm việc mà không có tham nhũng video.

Tôi sẽ đánh dấu câu trả lời của hsigmond là hợp lệ để cung cấp ví dụ thử nghiệm mà tôi có thể so sánh và tìm ra vấn đề thực sự. Toàn bộ công việc của tôi xung quanh việc này với các trình xử lý định hướng tùy chỉnh và một lớp con của VideoView đã sai và không chính xác dựa trên câu hỏi Android VideoView orientation change with buffered video. Không phải là rằng là sai, tôi chỉ đơn giản là áp dụng nó không chính xác (cộng với câu trả lời khác cũng đã đề cập đến thiếu android:configChanges).

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