2014-09-11 14 views
5

Tôi đang phát video ở chế độ xem bề mặt. Khi tôi mở rộng bề mặt, phối cảnh của nó được điều chỉnh tỉ lệ đúng nhưng nội dung video đang được phát thì không.Video không mở rộng khi SurfaceView được thu nhỏ

Tôi đang xem tỷ lệ bằng cách sử dụng phương thức ViewHelper.setscaleX. Tôi đã thử nhiều thứ nhưng không thể chia tỷ lệ video..if tôi thay đổi các thông số sau đó video được thu nhỏ. Nhưng điều đó làm cho quá trình chuyển đổi chậm. Vui lòng xem ảnh chụp nhanh của video đầu tiên và video cuối cùng (sau khi chia tỷ lệ).

initial video with surface view scale 1

video after surfaceView is scaled. See at the bottom-right

+1

"nếu tôi thay đổi params sau đó" params? params gì? – pskink

+0

Bố cụcParams của chế độ xem, thay đổi chiều rộng và chiều cao của chế độ xem. – sanjeev

+0

Ví dụ về thay đổi kích thước bề mặt SurfaceView, xem AspectFrameLayout trong Grafika (https://github.com/google/grafika/blob/master/src/com/android/grafika/AspectFrameLayout.java). Nó được sử dụng ở đó để điều chỉnh kích thước để phù hợp với tỷ lệ khung hình để phát lại video, nhưng phải thích ứng. – fadden

Trả lời

1

Giải quyết nó. Sử dụng TextureView thay vì SurfaceView. Ảnh động không hoạt động trên surfaceview. Sử dụng liên kết này để phát video bằng textureView: Playing video on TextureView

1

Hãy coi chừng TextureView sẽ tiêu thụ nhiều pin hơn SurfaceView vì nó vẽ video của bạn bằng cách sử dụng openGL trong khi SurfaceView có thể sử dụng lớp phủ phần cứng nếu có.

Như những người khác đã nói trong nhận xét, bạn có thể đạt được những gì bạn muốn bằng cách sửa đổi bố cụcParams của chế độ xem của bạn.

+1

'layoutParams' tiêu thụ nhiều CPU hơn so với' setScale ... 'do đó hoạt ảnh sẽ ở fps rất thấp – oleynikd

0

Nếu bạn phải gắn với SurfaceView vì bạn đang sử dụng thư viện của bên thứ ba hoặc không có điều gì, giải pháp thay thế sẽ giảm kích thước bằng hoạt ảnh tỷ lệ và SAU hoạt ảnh đã hoàn tất, cập nhật bố cục của SurfaceView bằng cách cho kích thước và vị trí chính xác. Nó không hoàn hảo, nhưng nên tốt cho những người không có lựa chọn nào khác.

0

Thêm chế độ xem trong suốt phía trên bản đồ lướt sóng như bố cục tương đối và thêm trình phát hiện tỷ lệ trên chế độ xem trong suốt đó và khi mở rộng quy mô chỉ thực hiện việc mở rộng trên surfaceview hoặc textureview.

Giả sử chế độ xem trong suốt có tên là videoview.

Videoview.setOnClicklistner(); 

Và khi mở rộng quy mô được thực hiện thực hiện điều đó scalefactor để surfaceview như

Surfaceview.setscaleX(scalefactor); 
Surfaceview.setscaleY(scalefactor); 

Nó sẽ làm việc trơn tru

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