vista tamaño solo previa poner peliculas miniaturas miniatura imagen como cambiar android videoview

android - tamaño - Cómo configurar la imagen de vista previa en video antes de jugar



vista previa youtube android (8)

Use seekTo( 1 ) para mostrar el primer cuadro.

Asegúrese de que la película esté en pausa y luego use seekTo() para mostrar el primer fotograma del video:

VideoView mVideoView = (VideoView) findViewById( R.id.video_preview ); mVideoView.setVideoURI( yourVideoPath ); mVideoView.seekTo( 1 ); // 1 millisecond (0.001 s) into the clip.

NOTA: usamos .seekTo( 1 ) porque la configuración de .seekTo( 0 ) no funcionó en Android 9.

Para que se reproduzca cuando se hace clic, @Lingviston ha respondido en otra respuesta.

He creado un VideoView en mi actividad, a continuación es el código.

VideoView vvVideos = (VideoView) rootView.findViewById(R.id.videoView); MediaController mediacontroller = new MediaController(ctx); mediacontroller.setAnchorView(vvVideos); Uri video = Uri.parse("android.resource://" + packageName +"/"+R.raw.sample); vvVideos.setMediaController(mediacontroller); LayoutParams params=vvVideos.getLayoutParams(); params.height=150; vvVideos.setLayoutParams(params); vvVideos.setVideoURI(video); vvVideos.requestFocus(); vvVideos.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { vvVideos.start(); } });

Ahora el video comienza a reproducirse cuando se crea la actividad. Quiero hacer mi actividad de la siguiente manera.

  1. El video no debe reproducirse cuando la actividad se abre.
  2. Se debe mostrar la imagen de video inicial (actualmente se muestra en color negro)
  3. Se debe reproducir solo cuando el usuario haga clic en el video.
    por favor, ayúdame.

1) Retire su onPrepareListener. No sé por qué su video comienza a reproducirse después de la creación de la actividad, pero se llama a onPrepareListener después de videoView.start ().

2) Agregue un widget de ImageView en su diseño en la parte superior de VideoView. A continuación, establezca otro onPrepareListener como este:

vvVideos.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { previewImage.setVisibility(View.GONE); } });

Me he dado cuenta de que OnPreparedListener se activa demasiado pronto, por lo que puede usar

new Handler().postDelay(Runnable, timeInMilis)

para descartar la imagen de vista previa.

3) Agregue OnTouchListener con cualquier detección de gestos a su VideoView. Aquí hay un ejemplo de lo que estoy usando ahora:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); mGestureDetector = new GestureDetector(this, mGestureListener); ((VideoView) findViewById(R.id.activity_video_videoview)).setOnTouchListener(mTouchListener); } private OnTouchListener mTouchListener = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { mGestureDetector.onTouchEvent(event); return true; } }; private SimpleOnGestureListener mGestureListener = new SimpleOnGestureListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { if(mVideoView.isPlaying()) mVideoView.pause(); else mVideoView.start(); return true; }; };

Se inicia / detiene la reproducción con un toque.


Crear miniatura de video usando este

Bitmap thumb = ThumbnailUtils.createVideoThumbnail("file path/url", MediaStore.Images.Thumbnails.MINI_KIND);

y listo para video

BitmapDrawable bitmapDrawable = new BitmapDrawable(thumb); mVideoView.setBackgroundDrawable(bitmapDrawable);


Para hacer que el video deje de reproducirse cuando comience la actividad, simplemente elimine el método video.start() .


Pensé en compartir mi solución. El método seekTo funciona muy bien pero solo para algunos dispositivos. Aquí está mi trabajo alrededor. Yo manejo esto en el método onPrepared para onPreparedListener pero depende de usted.

@Override public void onPrepared(MediaPlayer mp) { MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); mediaMetadataRetriever.setDataSource(uri.getPath()); try { Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(currentPosition); videoView.setBackgroundDrawable(new BitmapDrawable(bitmap)); } catch (OutOfMemoryError outOfMemoryError) { //Not entirely sure if this will ever be thrown but better safe than sorry. videoView.seekTo(currentPosition); } }

Ahora, cuando reproduzca el video, tendrá que eliminar esta imagen de fondo así:

private void play() { ... videoView.setBackgroundDrawable(null); .. }

¡Disfrutar!


Puedes hacerlo con Glide 4.x Obtendrá el primer cuadro de tu video, lo muestra en un ImageView

añadir a tu build.gradle

compile ''com.github.bumptech.glide:glide:4.3.1''

y en tu clase

GlideApp.with(context) .load("your video URL") .into(videoImageView);;


Sé que es una pregunta antigua, pero necesitaba la misma solución y no podía encontrar la respuesta en ningún otro lugar, así que hice la solución y estoy compartiendo el amor aquí:

Acabo de crear una pequeña clase para ello:

public class LoadFirstVideoFrame implements Runnable { private static Handler uiHandler = new Handler(Looper.getMainLooper()); private VideoView videoView; private LoadFirstVideoFrame(VideoView videoView) { this.videoView = videoView; videoView.start(); videoView.resume(); uiHandler.post(this); } public void stop() { videoView = null; uiHandler.removeCallbacks(this); } @Override public void run() { if (videoView == null) return; if (videoView.isPlaying()) { videoView.pause(); videoView.seekTo(0); videoView = null; } else { uiHandler.post(this); } } }

simplemente le pide que comience a reproducir y pausa el video nuevamente en el primer cuadro tan pronto como se está reproduciendo (lo que significa que cargó el archivo y ya lo está renderizando en SurfaceView).

La nota importante aquí es recordar llamar a stop() en esta clase para que pueda limpiarse correctamente y no que la memoria pierda nada.

Espero que ayude.


solo busque el video a 100 milisegundos; muestra la miniatura usando el método seekTo ()

videoView.seekTo(100);