Изменить размер видеопросмотра

Я пытаюсь динамически установить размер Android VideoView. Я просмотрел StackOverflow, а также Интернет; и лучшее решение, которое я нашел, было найдено здесь. Я поставил свою реализацию ниже:

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...");
    }
}

Размер видео корректно изменяется на эмуляторе Android, а также на Motorola Droid X; но на Motorola Droid размер VideoView изменяется, но размер видео, воспроизводимого в VideoView, не изменяется. На Motorola Droid, если для параметра VideoView установлено значение, превышающее размер воспроизводимого видео, в окне VideoView появляется черный фон, а видео воспроизводится в верхнем левом углу окна VideoView поверх черного фона.

Как правильно изменить размер VideoView в Android?

Спасибо, Вэнс


person Vance-Turner    schedule 14.06.2012    source источник


Ответы (1)


Моя реализация работает так:

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

Отменив видеопросмотр, вы заставите его перерисовать весь видеопросмотр, используя новые LayoutParams (и новые размеры).

person Ceetn    schedule 02.10.2012
comment
Я проверяю это. но он обрезает видео вместо изменения размера! Есть ли у вас какие-либо идеи? - person boomz; 14.04.2013
comment
@boomz Я наконец создал реализацию прошлым летом. Взгляните на VideoPlayer из проекта App Inventor (прошлым летом код изменения размера был моей работой). - person Vance-Turner; 07.06.2013