2012-06-14 13 views
8

Próbuję dynamicznie ustawić rozmiar Android VideoView. Spojrzałem na StackOverflow, a także Internet; a najlepszym rozwiązaniem, jakie znalazłem, było here. Poniżej przedstawiam moją implementację: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..."); 
    } 
} 

Film wideo zmienia się poprawnie na emulatorze Androida, a także na Motorola Droid X; ale w Motorola Droid, VideoView zmienia rozmiar, ale wideo odtwarzane w VideoView nie zmienia rozmiaru. W przypadku Motorola Droid, jeśli VideoView jest ustawiony na większy wymiar niż odtwarzanie wideo, czarne tło pojawia się w VideoView z wideo odtwarzanym w lewym górnym rogu VideoView na czarnym tle.

Jak prawidłowo zmienić rozmiar wideoView w systemie Android?

Dzięki, Vance

Odpowiedz

3

Moja implementacja działa tak:

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

poprzez unieważnienie videoview, można zmusić go przerysować cały videoview używając nowych LayoutParams (i nowe wymiary).

+0

Testuję to. ale przycina wideo zamiast zmieniać rozmiar! Masz jakiś pomysł? – boomz

+1

@boomz W końcu stworzyłem wdrożenie ostatniego lata. Zobacz klasę [VideoPlayer] (https://github.com/Vance-Turner/appinventor-sources/blob/master/appinventor/components/src/com/google/appinventor/components/runtime/VideoPlayer.java) z projektu App Inventor (kod zmiany rozmiaru, od zeszłego lata, był moją pracą). –