Me gustaría registrar un evento que se puede hacer clic en el pulgar de la barra de búsqueda para activar un evento cuando el usuario lo ha bloqueado. ¿Es posible?Pulsador de Seekbar al hacer clic
Respuesta
lo hago de esta manera:
pagesSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { //listener
@Override
public void onStopTrackingTouch(final SeekBar seekBar) {
//add your event here
}
@Override
public void onStartTrackingTouch(final SeekBar seekBar) {
}
@Override
public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) {
updateControls(progress, false);
}
});
Quiero poder hacer clic solo en el pulgar. Ese oyente se activa al hacer clic en cada parte de la barra de búsqueda – biquillo
yo era capaz de lograr esto de la siguiente manera:
seekBar.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_MOVE)
{
changedPosition = true;
seekBar.setProgress(seekBar.getProgress());
return false;
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
if(!changedPosition)
{
//do action here
}
}
}
espero que esto ayude
Esto escucharía eventos táctiles en toda la barra de búsqueda en lugar de solo el pulgar. – Prateek
Prateek tiene razón, esto disparará cuando te muevas sobre otras partes de la barra de búsqueda también. –
@ BjörnKechel, si bien es cierto que esto escucha eventos táctiles en toda la barra de búsqueda, pero si la toca en cualquier otro lugar que no sea el pulgar, entonces se activará ACTION_MOVE y en ACTION_UP no pasaría nada gracias a la instrucción if. – zwebie
Combinando zwebie y Nermeens respuestas a la adecuada solución:
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
private int mProgressAtStartTracking;
private final int SENSITIVITY;
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
// handle progress change
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mProgressAtStartTracking = seekBar.getProgress();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if(Math.abs(mProgressAtStartTracking - seekBar.getProgress()) <= SENSITIVITY){
// react to thumb click
}
}
});
Así que esto solo se activa al hacer clic con el pulgar, no al mover el dedo pulgar y no al hacer clic en otras partes de la barra de búsqueda.
Puede ajustar la sensibilidad, porque a veces un clic ya mueve el pulgar un poco y permitir pequeños cambios mientras sigue haciendo clic es menos frustrante. Un buen valor depende del tamaño de la barra de búsqueda y del valor máximo que puede tener. Para mí, 3 funcionó bien en una barra de búsqueda de ancho completo con 50 máx. En un diseño de retrato.
@ quien haya votado negativamente: por favor dígame qué piensa que está mal con mi respuesta. Funciona mejor que las otras dos respuestas. –
Gracias, trabajando bien para mí, aunque no sé por qué alguien votó – Vicky
Utilicé la respuesta de Bijom como inspiración. Se disparará cuando el pulgar se mueva, de modo que si el usuario no hace clic en el pulgar, no se moverá. Espero que esto ayude. :)
Si tiene alguna pregunta sobre cómo funciona, no dude en comentar.
mSeekBarSpeed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progress = mSeekBarSpeed.getProgress();
boolean started = false; //use this variable to see whether the user clicked the right place
@Override
public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) {
if(!started){ //check to see if user clicks the right place
//if the user clicks within a specific threshold
float threshold = (float)seekBar.getMax()/seekBar.getWidth() * seekBar.getThumb().getIntrinsicWidth()/2;
if(Math.abs(progressValue - progress) < threshold){
if(fromUser){ //checks if user actually clicked it
started = true;
}
}else{
seekBar.setProgress(progress); //set to original progress
onStopTrackingTouch(seekBar); //not really necessary, keep or delete based on your needs
return; //get out of method
}
}
if(started) {
progress = progressValue; //update progress variable
System.out.println("onProgressChanged:" + progress + "/" + seekBar.getMax());
//DO WHAT YOU NEED TO DO WHEN PROGRESS IS CHANGING
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
System.out.println("onStartTracking:" + progress + "/" + seekBar.getMax());
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
System.out.println("onStopTracking:" + progress + "/" + seekBar.getMax());
//DO WHATEVER YOU NEED TO DO WHEN PROGRESS IS DONE CHANGING
started = false; //remember to set variable to false
}
});
- 1. destino al hacer clic
- 2. Eliminar DIV al hacer clic
- 3. Restablecer setinterval al hacer clic
- 4. Demora de tiempo al hacer clic
- 5. Capturar valores de SeekBar
- 6. markerClusterer al hacer clic en el zoom
- 7. Marcador al hacer clic con jQuery
- 8. NSButton fondo blanco al hacer clic
- 9. Jquery cambiar imagen al hacer clic
- 10. Datagridview causando IndexOutOfRangeException al hacer clic en
- 11. Jquery móvil: Cambiar tema al hacer clic
- 12. Auto-Launch JNLP al hacer clic
- 13. d3 javascript colores alternativos al hacer clic
- 14. Android: ¿Genera colores aleatorios al hacer clic?
- 15. JQuery alternar filas al hacer clic
- 16. Navegador Android borde VERDE al hacer clic
- 17. al hacer clic en evento en wx.Panel?
- 18. al hacer clic con href en JSP
- 19. Javascript desplazamiento para arriba al hacer clic
- 20. mostrar/ocultar la imagen al hacer clic
- 21. Rotar texto al hacer clic en evento
- 22. Hacer un enlace Negrita al hacer clic con Jquery
- 23. SeekBar programación
- 24. ¿Cambiar tamaño de Android-Seekbar?
- 25. ¿Al hacer clic en el elemento principal, también se puede hacer clic en el elemento secundario?
- 26. Botón de opción de verificación al hacer clic en DIV
- 27. Android media player seekbar
- 28. Anime seekbar progress
- 29. prevención de la página al hacer clic en saltos
- 30. jQuery Fadeout al hacer clic o después de la demora
¿Has resuelto esto? – David