2014-12-11 18 views

risposta

10

È possibile modificare la dimensione della vista (utilizzando un FrameLayout personalizzato) oppure utilizzare la matrice TextureView per modificare il modo in cui la texture viene renderizzata.

Esempi di entrambi possono essere trovati in Grafika. L'attività "Riproduci video (TextureView)" dimostra la configurazione della matrice in modo che corrisponda alle proporzioni di un video. Vedere il metodo adjustAspectRatio(), il cui nucleo è:

Matrix txform = new Matrix(); 
    mTextureView.getTransform(txform); 
    txform.setScale((float) newWidth/viewWidth, (float) newHeight/viewHeight); 
    txform.postTranslate(xoff, yoff); 
    mTextureView.setTransform(txform); 

Nota centra così come in scala del video.

+0

@fadden si prega di controllare questa domanda https://stackoverflow.com/questions/48988063/how-can-i-scale-video-in-exoplayer-v2-play-video-in-full-screen utilizzando expoplayer è possibile effettuare la scansione nel centro –

0

Ampliando la risposta di Fadden sopra: Se si desidera allineare il video in un altro modo diverso da solo centrarla, modificare queste linee in "adjustAspectRatio) (" Codice del Grafika:

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

a:

int xoff = 0; //align left 

o

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

o

int yoff = 0; // align top 

o

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

Beh io sono troppo tardi per rispondere, ma come ho avuto da Grafika è possibile utilizzare questa funzione

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

è possibile utilizzare con exoplayer –

+0

@Sagar Hudge sì, certo che puoi usare exolplayer per riprodurre video, questa domanda è per coloro che non usano alcuna libreria di terze parti per riprodurre video –

+0

Voglio riprodurre video a schermo intero in verticale ma si estendono verticalmente sul ridimensionamento 'FILL', voglio riempire e centro coltura –