2012-06-14 5 views
8

Ich versuche, die Größe eines Android VideoView dynamisch festzulegen. Ich habe sowohl StackOverflow als auch das Internet angeschaut. und die beste Lösung, die ich fand, war von here. Ich habe meine Implementierung unten gesetzt:Resize 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..."); 
    } 
} 

Das Video passt korrekt auf dem Android-Emulator sowie auf einem Motorola Droid X; Bei einem Motorola Droid ändert sich die Größe des VideoView, aber das Video, das in der Videoansicht abgespielt wird, wird nicht skaliert. Wenn das VideoView auf dem Motorola Droid auf eine größere Dimension als das wiedergegebene Video eingestellt ist, wird in der Videoansicht ein schwarzer Hintergrund angezeigt, wobei das Video in der oberen linken Ecke des VideoView über dem schwarzen Hintergrund wiedergegeben wird.

Wie passt man eine VideoView in Android richtig an?

Danke, Vance

Antwort

3

Meine Implementierung funktioniert wie folgt:

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(); 

Durch die Videoview ungültig zu machen, werden Sie es zwingen, die gesamte Videoview mit den neuen LayoutParams (und die neuen Dimensionen) neu zu zeichnen.

+0

Ich teste es. Aber es beschneidet das Video anstatt die Größe zu ändern! Hast du irgendeine Idee? – boomz

+1

@boomz Ich habe letzten Sommer eine Implementierung erstellt. Sehen Sie sich die Klasse [VideoPlayer] (https://github.com/Vance-Turner/appinventor-sources/blob/master/appinventor/components/src/com/google/appinventor/components/runtime/VideoPlayer.java) an aus dem App Inventor-Projekt (der Größenänderungscode war letzten Sommer meine Arbeit). –