2012-06-14 24 views
8

Estoy intentando configurar dinámicamente el tamaño de una VideoView de Android. He buscado en StackOverflow y en Internet; y la mejor solución que encontré fue desde here. He puesto mi aplicación a continuación:Redimensionar VideoView

public class ResizableVideoView extends VideoView { 

    public ResizableVideoView(Context c) { 
     super(c); 
    } 

    private int mVideoWidth = 100; 
    private int mVideoHeight = 100; 

    public void changeVideoSize(int width, int height) { 
     mVideoWidth = width;  
     mVideoHeight = height; 

     // not sure whether it is useful or not but safe to do so 
     getHolder().setFixedSize(width, height); 

     forceLayout(); 
     invalidate(); // very important, so that onMeasure will be triggered 
    } 

    public void onMeasure(int specwidth, int specheight) { 
     Log.i("onMeasure","On Measure has been called"); 
     setMeasuredDimension(mVideoWidth, mVideoHeight); 
    } 

    public void onDraw(Canvas c) { 
     super.onDraw(c); 
     Log.i("onDraw","Drawing..."); 
    } 
} 

El vídeo cambia de tamaño correctamente en el emulador de Android, así como en un Motorola Droid X; pero en un Motorola Droid, VideoView cambia el tamaño pero el video que se reproduce en VideoView no cambia de tamaño. En el Motorola Droid, si el VideoView está configurado en una dimensión más grande que la reproducción de video, aparece un fondo negro en VideoView con el video reproduciéndose en la esquina superior izquierda de VideoView encima del fondo negro.

¿Cómo se cambia el tamaño de una VideoView correctamente en Android?

Gracias, Vance

Respuesta

3

Mi aplicación funciona así:

RelativeLayout.LayoutParams videoviewlp = new RelativeLayout.LayoutParams(newwidth, newheight); 
    videoviewlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); 
    videoviewlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); 
    videoview.setLayoutParams(videoviewlp); 
    videoview.invalidate(); 

invalidando la VideoView, que lo obligarán a rediseñar toda la VideoView utilizando las nuevas LayoutParams (y las nuevas dimensiones).

+0

Lo pruebo. ¡pero recorta el video en lugar de cambiar el tamaño! ¿Tiene alguna idea? – boomz

+1

@boomz Finalmente creé una implementación el verano pasado. Eche un vistazo a la clase [VideoPlayer] (https://github.com/Vance-Turner/appinventor-sources/blob/master/appinventor/components/src/com/google/appinventor/components/runtime/VideoPlayer.java) del proyecto App Inventor (el código de cambio de tamaño, desde el verano pasado, fue mi trabajo). –