2012-01-30 4 views
2

Я некоторое время борюсь с этим вопросом видео. Я думал, что у тебя могут быть идеи, которые помогут мне.Проблема с масштабированием VideoView

Итак, у меня есть этот VideoView в макете кадра, а сверху у меня есть ToggleButton, чтобы сделать масштабирование и вернуться с масштабирования.

<CustomVideoView 
     android:id="@+id/video_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:keepScreenOn="true" > 
</CustomVideoView> 

и у меня есть видео 480x360, и я подумал, что, делая увеличения в портретном, я изменить его на высоту экрана и расчетной ширину, на основе соотношения видео. (В альбомном иначе).

я продлил VideoView к CustomVideoView с помощью:

public class CustomVideoView extends VideoView { 

    protected int _overrideWidth = 480; 

    protected int _overrideHeight = 360; 

    public CustomVideoView(Context context) { 
     super(context); 
    } 

    public CustomVideoView(Context context, AttributeSet set) { 
     super(context, set); 
    } 

    public void resizeVideo(int width, int height) { 
     _overrideHeight = height; 
     _overrideWidth = width; 
     // not sure whether it is useful or not but safe to do so 
     getHolder().setFixedSize(width, height); 
     requestLayout(); 
     invalidate(); // very important, so that onMeasure will be triggered 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     setMeasuredDimension(_overrideWidth, _overrideHeight); 
    } 
} 

на некоторых устройствах трюк отлично работает, но на Google Nexus с 4.0.3 он растягивает видео на экране и на Galaxy S 2.3.3 не работает вообще.

ответ

2

Возможно, это зависит от базового кода, который является поставщиком (Samsung в вашем случае), используемого для реализации SurfaceView (и так далее VideoView). Кроме того, MediaPlayer, входящий в состав VideoView, также может иметь реализацию, специфичную для устройства (также родную), и может влиять на все поведение VideoView.

+0

, так что я ничего не могу с этим поделать? если он является родным, кажется, что масштабирование никогда не будет работать одинаково на всех устройствах? Как насчет Nexus, у этого не должно быть специального кода? –

+0

Я только что сравнил VideoView с 2.2 с одним из 4.0.3 и там же различия ... могут ли они быть теми, которые вызывают разное поведение? http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/widget/VideoView.java/?v=diff&id2=2.2_r1.1 –

+1

Нет, в 4.0.3 они просто добавили несколько состояний MediaPlayer и предоставили новый контроллер. Итак, я ничего не могу сказать о собственном коде. – OleGG

Смежные вопросы