Tiempo de aumento de OnLongPress
Tengo imageView. Estoy usando pan, pinch para imageView. A veces necesito borrar imageView. Por lo tanto, usé OnLongClickListener para eliminar la imagen. Cuando uso largo haga clic en mi imageView la eliminación. Pero cuando utilizo OnTouchListener para pan, pinch para imageView OnLongPress activado y mi imageView eliminado de la vista. ¿Cómo resolver esto?
código:
- Android principiante: toque eventos en android gridview
- Android WindowManager TYPE_SYSTEM_ALERT Diseño en el tacto
- Diseño con posición dinámica
- Android: ImageView getID (); Devolver entero
- Ver sólo el registro de MotionEvent.ACTION_DOWN
imageView.setOnLongClickListener(new OnLongClickListener(){ @Override public boolean onLongClick(View v) { // TODO Auto-generated method stub imageView.setVisibility(View.GONE); return true; } }); imageView.setOnTouchListener(new View.OnTouchListener() { final Handler handler = new Handler(); Runnable mLongPressed = new Runnable() { public void run() { Log.i("", "Long press!"); } }; @Override public boolean onTouch(View v,MotionEvent event) { // TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_DOWN) handler.postDelayed(mLongPressed, 1000); if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP)) handler.removeCallbacks(mLongPressed); layoutParams = (RelativeLayout.LayoutParams) imageView.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN : { parms = (RelativeLayout.LayoutParams) imageView.getLayoutParams(); dx = event.getRawX() - parms.leftMargin; dy = event.getRawY() - parms.topMargin; } break; case MotionEvent.ACTION_MOVE : { x = event.getRawX(); y = event.getRawY(); parms.leftMargin = (int) (x-dx); parms.topMargin = (int) (y - dy); imageView.setLayoutParams(parms); } break; case MotionEvent.ACTION_UP : { } break; } return false; } }); } });
- Analog SetOnTouchListener o cómo se utiliza en xamarin, qué argumento debe ser
- Imagen en lienzo con eventos táctiles
- OnTouchevent () vs onTouch ()
- Método único para implementar onTouchListener () para varios botones
- Obtener coordenadas reales de xy de los usuarios
- Ocultar teclado en android mientras se toca fuera Editar área de texto
- No puede manejar simultáneamente los eventos de clic y de toque
- OnTouchListener de una vista vs onTouchEvent
Puede utilizar un controlador para hacer esto pero debe recordar cancelar el controlador si el usuario extrae su dedo de la pantalla. Yogesh no está totalmente equivocado, pero el enfoque anterior simplemente agrega un retardo de 1000 ms entre onClick y cuando se ejecuta el runnable. Eso significa que si el usuario levanta su dedo el runnable seguirá funcionando. Esto no es una verdadera presión.
A continuación, puede ver que todavía estoy usando un controlador con un retraso de 1000 ms (se puede establecer a lo que quieras), pero eliminar la devolución de llamada si el usuario levanta el dedo hacia arriba o se mueve. Si desea deshacerse del activador de movimiento simplemente elimine esa parte de la llamada. Pero para afectar a la prensa larga que necesita para dar cuenta de la elevación para asegurar que el usuario tiene su dedo todo el tiempo.
final Handler handler = new Handler(); Runnable mLongPressed = new Runnable() { public void run() { Log.i("", "Long press!"); } }; @Override public boolean onTouchEvent(MotionEvent event, View v){ if(event.getAction() == MotionEvent.ACTION_DOWN) handler.postDelayed(mLongPressed, 1000); if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP)) handler.removeCallbacks(mLongPressed); return false; }
prueba el siguiente código: –
imageView.setOnClickListener(new View.OnClickListener() Handler handle = new Handler(); handle.postDelayed(new Runnable() { @Override public void run() { imageView.setVisibility(View.GONE); },1000); }
1000 es el tiempo que puedes aumentar como quieras.
onTouch
es siempre llamado para su vista ya que este es el estado inicial de envío de los eventos a la vista. Cuando long press
tu vista, esto todavía llama onTouch
first
y puesto que return true
en onTouch
(lo que significa que has consumido este evento y no debería ser enviado más lejos) no te pondrás en ONLongPress llamado. Lo que hará el truco es returning false
en onTouch
Sé que una respuesta fue elegida hace un tiempo, pero para cualquiera que esté buscando una solución para extender realmente el tiempo largo de la prensa, la solución es utilizar un booleano en onKeyUp () para evitar que su código en ejecución se ejecute. De esta manera un evento KeyUp único no causará un reinicio y no sólo retrasar el ejecutables. Utilicé keyevents pero esta solución debe trabajar para los acontecimientos del tacto también.
private static final int longPressMilli = 3000; boolean allowReset = true; Runnable mLongPressed = new Runnable() { @Override public void run() { if(allowReset) { sendResetIntent(); Log.d(TAG, "Trip Reset!"); allowReset = false; } } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub //System.out.println("" + keyCode); if(GlobalBooleans.getReverseCamera()) return true; switch (keyCode) { case KeyEvent.KEYCODE_F6: allowReset = true; //reset to true if u need to able to reset multiple times without navigating away from the page pressHandler.postDelayed(mLongPressed, longPressMilli); break; default: break; } // } return true; } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_F6: allowReset = false; break; } return super.onKeyUp(keyCode, event); }
- Acceder a actionView en el ActionBar
- EXCEPCIÓN FATAL: main java.lang.VerifyError: net.sourceforge.jtds.jdbc.TdsCore