PDA

Ver la Versión Completa : [ CONSULTA ] Pulsacion Larga


pablogarcia013
05/02/13, 12:41:15
Buenas!

Estoy teniendo problemas con "onLongClick" a ver si me podeis echar un cable.

Tengo una serie de imagenes (Bitmap) sobre un canvas, este canvas tiene implementado onTouchEvent de manera que si pulso encima de la imagen y la muevo esta se mueve, Lo que me gustaría hacer ahora es que si dejo el dedo encima de la imagen un par de segundos o los que sean (una pulsación larga) me abra un menu, este menu ya lo tengo implementado, solo me queda saber como puedo hacer que la imagen detecte el evento de pulsación larga

Gracias por adelantado.

set92
05/02/13, 19:34:39
segun veo en este video http://www.youtube.com/watch?v=ySmW1cAzM9Q simplemente es implementar un setonclicklistener y luego te aparece el metodo de onlongclick y ahi dentro tienes que poner que cosas quieres que se haga, en tu caso el menu.

pablogarcia013
06/02/13, 09:29:01
Gracias por la respuesta, pero a un Bitmap no me deja asignarle onLongClick es decir tengo esto:

Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.img1);
que es lo que pinto en mi canvas.
y lo que no puedo hacer es bmp.setOnLongClick(....);

¿Alguna Idea?

set92
06/02/13, 10:43:22
Tienes razon, pues salvo que alguien te diga el modo correcto a mi solo se me ocurre ahora mismo comprobar que el usuario pulsa una X y una Y, y como me imagino que tu imagen estara dentro de un rectangulo para el tema de colisiones que uses el metodo rectangulo.contains(x, y); , donde x e y sean los valores que ha pulsado el usuario recojidos en el metodo de ontouchevent al pulsar, hasta aqui seria una pulsacion normal, y para una pulsacion larga seria hacerle un tipo contador y que si mantiene pulsado 3 segundos le aparece el menu.

El tema es el contador que no se muy bien como podrias hacerlo pero creo que long time = System.currentTimeMillis(); te devuelve el tiempo actual en milisegundos, y si haces un if al de un rato volviendo a cojer la ahora actual y restandosela a la anterior y que cuando sea 3000 te aparezca el menu, algo asi no deberia funcionar? Aun asi haber si viene alguien que sepa como funciona el onlongclick aunque no se si funcionara si la clase no hereda de activity o view

pablogarcia013
13/02/13, 10:22:00
No he tenido tiempo para probarlo hasta ahora y si que me sirve, pero me funciona a medias,
tengo lo siguiente:

case MotionEvent.ACTION_DOWN:
Timer timer=new Timer();
timer.schedule(new TimerTask(){
public void run(){
ti=ti+1;
}
},1,10000);
if(this.ti>=1){
this.mostrarMenuIzq();
}
break;


pero esto no me lo muestra, si pongo en el ACTION_UP el if(this.ti>=2).... si me lo muestra cuando recibe el evento de levantar el dedo. alguna idea??

Gracias!

set92
15/02/13, 12:31:02
Pues nunca lo he llegado a hacer pero la logica me dice que solo entra en ese switch/if una sola vez, la vez que pulsas, y como la primera vez que pulsas es cuando se pone en ejecuccion el contador entonces al pulsar tu ya no hace mas porque ya ha entrado una vez, ha puesto en marcha el contador, ha mirado si el condicional era true, y como era false ha seguido para delante y no se ha vuelto ha ejecutar ese switch, me imagino que en la segunda pulsacion igual si que entraria en el if y por lo tanto mostraria el menu.

Soluciones...pues el timer que empiece fuera del action_down, es decir en el ontouchevent() pero sin estar dentro del switch y sino la parte del if que sea mayor que 1 ponla fuera del ontouch que igual esta hasta mejor, lo unico que como tiene que estar todo el rato comprobando si se ha cumplido no se en que metodo lo podrias poner...se me ocurre hacer un hilo y con un bucle infinito que lo este comprobando todo el rato pero esto en tema de recursos no es muy correcto tener un hilo solo para eso.