best app android android-video-player

android - best - video player app



Cambiar el tamaƱo del video para adaptarse a la VideoView (3)

Después de cambiar sus LayoutParams , creo que tendrá que llamar a setLayoutParams para que el diseño pueda actualizarse con los nuevos parámetros. Después de la llamada a setLayoutParams es posible que tenga que llamar al método reqestLayout para invalidar el diseño y desencadenar un rediseño de la vista.

Necesitará crear una nueva instancia del MediaController y usar el método setMediaController en el objeto VideoView .

Estoy posicionando un VideoView con AbsoluteLayout (necesito mostrarlo en varios lugares en la pantalla en posiciones específicas).

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

Pero el video no se redimensionó a los límites que especifiqué.

¿Algun consejo?

Otra pregunta relacionada es, ¿cómo hacer que el MediaController se muestre a través de VideoView?


Esto está muy cerca de lo que estás tratando. Si está dispuesto a subclasificar la vista de video y override onMeasure , esta es la solución. necesitas

MyVideoView extends VideoView

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

en cuanto a mostrar MediaController sobre VidowView

Declarar

private MediaController controller = null;

OnCreate

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

Actividad

@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; }

Eventos de Media Controller

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; } };

un archivo de diseño de muestra

<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>


Solo puedes cambiar el archivo de diseño:

<?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>