2014-12-11 52 views

Trả lời

10

Bạn có thể thay đổi kích thước của Chế độ xem (sử dụng FrameLayout tùy chỉnh) hoặc sử dụng ma trận TextureView để thay đổi cách kết xuất được hiển thị.

Ví dụ về cả hai có thể được tìm thấy trong Grafika. Hoạt động "Phát video (TextureView)" thể hiện cấu hình ma trận để phù hợp với tỷ lệ khung hình của video. Xem phương pháp adjustAspectRatio(), cốt lõi trong số đó là:

Lưu ý rằng trung tâm cũng như chia tỷ lệ video.

+0

@fadden hãy kiểm tra câu hỏi này https://stackoverflow.com/questions/48988063/how-can-i-scale-video-in-exoplayer-v2-play-video-in-full-screen sử dụng expoplayer là nó có thể để lớp ở trung tâm –

1

Bạn có thể sử dụng ExoPlayer https://github.com/google/ExoPlayer# và kiểm tra bản trình diễn đầy đủ. Nó duy trì tỷ lệ khung hình video một cách hoàn hảo.

0

Mở rộng về câu trả lời Fadden của trên: Nếu bạn muốn sắp xếp video theo cách khác khác hơn là chỉ tập trung nó, sửa đổi các dòng trong "adjustAspectRatio()" mã của Grafika:

int xoff = (viewWidth - newWidth)/2; 
int yoff = (viewHeight - newHeight)/2; 

để:

int xoff = 0; //align left 

hoặc

int xoff = (viewWidth - newWidth); // align right 

hoặc

int yoff = 0; // align top 

hoặc

int yoff = (viewHeight - newHeight); // align bottom 
0

Vâng tôi quá muộn để trả lời nhưng khi tôi nhận được từ Grafika bạn có thể sử dụng chức năng này

private void adjustAspectRatio(int videoWidth, int videoHeight) { 
    int viewWidth = mTextureView.getWidth(); 
    int viewHeight = mTextureView.getHeight(); 
    double aspectRatio = (double) videoHeight/videoWidth; 

    int newWidth, newHeight; 
    if (viewHeight > (int) (viewWidth * aspectRatio)) { 
     // limited by narrow width; restrict height 
     newWidth = viewWidth; 
     newHeight = (int) (viewWidth * aspectRatio); 
    } else { 
     // limited by short height; restrict width 
     newWidth = (int) (viewHeight/aspectRatio); 
     newHeight = viewHeight; 
    } 
    int xoff = (viewWidth - newWidth)/2; 
    int yoff = (viewHeight - newHeight)/2; 
    Log.v(TAG, "video=" + videoWidth + "x" + videoHeight + 
      " view=" + viewWidth + "x" + viewHeight + 
      " newView=" + newWidth + "x" + newHeight + 
      " off=" + xoff + "," + yoff); 

    Matrix txform = new Matrix(); 
    mTextureView.getTransform(txform); 
    txform.setScale((float) newWidth/viewWidth, (float) newHeight/viewHeight); 
    //txform.postRotate(10);   // just for fun 
    txform.postTranslate(xoff, yoff); 
    mTextureView.setTransform(txform); 
} 
+0

là nó có thể sử dụng với exoplayer –

+0

@Sagar Hudge yeah chắc chắn bạn có thể sử dụng exolplayer để chơi video, câu hỏi này là dành cho những người không sử dụng bất kỳ thư viện của bên thứ ba để phát video –

+0

Tôi muốn phát video ở chế độ toàn màn hình theo chiều dọc nhưng nó kéo theo chiều dọc trên 'FILL' thay đổi kích thước, tôi muốn điền và cắt trung tâm –

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