Android: ¿Por qué no puedo dar un onClickListener a un VideoView?
He escrito estas líneas de código:
mVideoView = (VideoView) findViewById(R.id.video_view); mVideoView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.v("LOG_TAG, click"); } });
Sin embargo, cuando ejecuto mi aplicación, el evento de clic nunca se llama.
- Problema con la vista de vídeo en android 4.0 y superior
- Reproducción de archivos de vídeo cifrados mediante VideoView
- Reproducir vídeo en parte de la pantalla
- Cómo detectar si VideoView está reproduciendo video o Buffering?
- Cómo reproducir varios vídeos en diferentes vistas de vídeo en una actividad
Así que me pregunto, ¿es imposible registrar un OnClickListener en un VideoView? Y, si es así, ¿por qué es el caso?
- Cómo modificar el ancho de videoview programatically
- VideoView flash negro antes y después de jugar
- ¿Cómo ejecutar varios videos con diferentes VideoViews en una actividad en android 2.2?
- ¿Por qué mi aplicación Android dice "No se puede reproducir el vídeo" después de la reproducción?
- Cómo crear círculo o videoView redondo en android?
- Ocultar el botón de pausa de reproducción del controlador de medios en android
- La vista de video no reproduce el video de youtube
- Android 2.2 VideoView problema
Utilice VideoView.setOnTouchListener(..)
funciona para VideoView
He aquí cómo resolví la pausa / reproducción de VideoViews con onTouch:
// Class variables private boolean bVideoIsBeingTouched = false; private Handler mHandler = new Handler(); vvVideo.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (!bVideoIsBeingTouched) { bVideoIsBeingTouched = true; if (vvVideo.isPlaying()) { vvVideo.pause(); } else { vvVideo.resume(); } mHandler.postDelayed(new Runnable() { public void run() { bVideoIsBeingTouched = false; } }, 100); } return true; } });
Sé que esto es viejo pero utilicé esto:
mVideoView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.i(TAG, "Video 1 clicked, starting playback"); return false; } });
Sé que esto es y la vieja pregunta, pero aquí es lo que hice:
Desde setOnClickListener no se ha activado, he creado mi propia clase que se extiende VideoView
public class VideoViewCustom extends VideoView{
Y reemplazado el evento onTouchEvent
@Override public boolean onTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_DOWN){ Log.d(TAG, "ACTION_DOWN"); } return super.onTouchEvent(ev); }
Y ahora puedo obtener el evento onClick con el MotionEvent.
Espero que esto ayude a alguien!
Esto es probablemente hace mucho tiempo, sin embargo, de alguna ayuda para aquellos que pueden encontrarse con un problema similar. La manera que conseguí alrededor de este problema estaba poniendo una visión transparente de la imagen encima de la visión video, después escuchando los acontecimientos de onClick en la visión de la imagen, y haciendo lo que él era quería hacer con la visión video después.
Me doy cuenta de que esta es una vieja pregunta, pero pensé que me gustaría escuchar con una solución fácil. No puedo responder por qué esto no funciona – parece un gran descuido en mi opinión. Pero una solución fácil es colocar su VideoView como la única vista dentro de un FrameLayout y establecer un OnClickListener en el diseño. no es ideal, pero funciona.
Usted puede utilizar un botón que es transparente en la vista de vídeo si desea que una parte específica del video en el toque para hacer algo.
El VideoView es un contenedor que contiene mdeiaplayer y surfaceView. Puede interactuar con MediaController o escribir su propio SurfaceView e implementar eventos onClick.
Puede probar Gesture Overlay View
Debería poder superponer esta vista encima de otra vista para obtener eventos de toque.
¡Espero que esto ayude!
Es posible que haya hecho esto con onSetClickListener. Y aquí hay un código para su ayuda:
mVideoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Here you put a condition for playing a video when you click on your video view.// if(my_video.isPressed()) { my_video.start(); } else { Toast.makeText(getApplicationContext(), "Not able to run This Video!", Toast.LENGTH_LONG).show(); } } });
- Cómo detectar la información del sistema como OS o tipo de dispositivo
- Múltiples paquetes de aplicaciones Android .APK de código fuente único