Intereting Posts

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

Я позиционирую VideoView с AbsoluteLayout (мне нужно отображать его на нескольких местах в экране на определенных позициях).

public void showVideo(RectF bounds, final String videoUrl) { AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) video.getLayoutParams(); params.width = (int) bounds.width(); params.height = (int) bounds.height(); params.x = (int) bounds.left; params.y = (int) bounds.top; video.requestLayout(); video.setVisibility(View.VISIBLE); video.setFocusable(true); video.setFocusableInTouchMode(true); video.requestFocus(); File file = new File(videoUrl); video.setVideoPath(file.getAbsolutePath()); video.start(); } 

Но видео не изменилось до границ, которые я указал.

Какие-нибудь советы?

Другой связанный с этим вопрос заключается в том, как сделать MediaController над VideoView?

Solutions Collecting From Web of "Изменение размера видео в соответствии с VideoView"

Это очень близко к тому, что вы пытаетесь. Если вы хотите подклассировать видео и override onMeasure вот решение. тебе нужно

 MyVideoView extends VideoView 

https://stackoverflow.com/questions/4434027/android-videoview-orientation-change-with-buffered-video/4452597#4452597


Как для показа MediaController над VidowView

декларировать

 private MediaController controller = null; 

OnCreate

 controller = new MediaController(this); controller.setMediaPlayer(mcEvents); controller.setAnchorView(findViewById(R.id.wrapper)); 

Мероприятия

 @Override public boolean onTouchEvent(MotionEvent event) { //the MediaController will hide after 3 seconds - tap the screen to make it appear again controller.show(); return false; } 

События медиаконтроллера

 private MediaController.MediaPlayerControl mcEvents = new MediaController.MediaPlayerControl() { public void start() { player.start(); } public void seekTo(int pos) { player.seekTo(pos); } public void pause() { player.pause(); } public boolean isPlaying() { return player.isPlaying(); } public int getDuration() { return player.getDuration(); } public int getCurrentPosition() { return player.getCurrentPosition(); } public int getBufferPercentage() { return pBuffer; } public boolean canSeekForward() { return true; } public boolean canSeekBackward() { return true; } public boolean canPause() { return true; } }; 

Образец файла макета

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/wrapper" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.my.views.MyViedoView android:id="@+id/player" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </FrameLayout> 

После того, как вы измените LayoutParams я думаю, вам нужно будет вызвать setLayoutParams чтобы макет мог быть обновлен с новыми параметрами. После вызова setLayoutParams вам может потребоваться вызвать метод reqestLayout чтобы аннулировать макет и вызвать перерисовку представления.

Вам нужно будет создать новый экземпляр MediaController и использовать метод setMediaController VideoView объекта VideoView .

Вы можете изменить только файл макета:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <VideoView android:id="@+id/videoViewRelative" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_width="fill_parent" android:layout_height="fill_parent"> </VideoView> </RelativeLayout>