![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Cambiar imagen justo al pulsar un boton
Hola, tengo un codigo que cuando pulso un boton muestra una imagen como que se esta pulsado mientras mantengo el dedo enn la pantalla, pero en cuanto levanto el dedo vuelve a su imagen original, el problema es que si es una pulsacion normal que no lo mantengo algo mas de tiempo no cambia la imagen, debe de ser porque se hace todo muy rapido y no se aprecia, alguien sabe como por muy rapido que le de a la pantalla con el dedo en el boton cambie la imagen aunque sea muy rapido?
Pongo el codigo: button.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { int action = MotionEventCompat.getActionMasked(event); switch (action) { case (MotionEvent.ACTION_DOWN): ((ImageButton)findViewById(R.id.button_shoot)).set BackgroundResource(R.drawable.boton_down); if (!mCIR.hasIrEmitter()) { Toast toast = Toast.makeText(getApplicationContext(), getString(R.string.error), Toast.LENGTH_SHORT); toast.show(); } else { (mando señal) } return true; case (MotionEvent.ACTION_MOVE): return true; case (MotionEvent.ACTION_UP): ((ImageButton)findViewById(R.id.button_shoot)).set BackgroundResource(R.drawable.boton_up); return true; case (MotionEvent.ACTION_CANCEL): return true; case (MotionEvent.ACTION_OUTSIDE): return true; default: return true; } } }); |
|
|
|
#2
|
||||
|
||||
|
La operación setBackgroundResource es costosa (estamos hablando de milisegundos, pero para tu caso es lo suficientemente costosa) así que Android en esos casos tiende a saltar frames si hay una operación posterior que va a hacer también un cambio.
Puedes probar 2 cosas: 1) Cambiar el botón por un RelativeLayout, y poner dentro las 2 imágenes ya cargadas, tu operación lo que haría sería cambiar simplemente la visiblidad de las 2 imágenes. Debe ser una operación mucho más rápida, pero tampoco te aseguro que vaya a funcionar. 2) Usar un SurfaceView, ya que el pintado se realiza en otro hilo y no salta frames (salvo que tu lo programes). El SurfaceView es lo que se usa para cuando requieres de alta carga gráfica, por ejemplo juegos. |
| Gracias de parte de: | ||
|
#3
|
||||
|
||||
|
Como controlas kriogeN, muy buenas, había dejado de enredar con esto hace tiempo y he empezado otra vez y te he vuelto a ver por aquí, gracias voy a probar lo segundo
|
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 23:35:22 (GMT +1)
HTCMania: líderes desde el 2007





