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
Testuję to. ale przycina wideo zamiast zmieniać rozmiar! Masz jakiś pomysł? – boomz
@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ą). –