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:

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; } }); } }); 

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); } 
  • android arrastrar y soltar ImageView onTouchListener
  • Hacer diferencias entre setOnClickListener y setOnTouchListener
  • Android: OnTouch, MotionEvent.ACTION_MOVE no está reconocido?
  • Obtener elemento de ListView sólo con OnTouchListener
  • PopupWindow TouchInterceptor no funciona
  • Disparar Evento táctil desde la vista DialogFragment a la vista de actividad principal
  • Reducir animadamente el tamaño del botón en la prensa y recuperar su tamaño en la versión
  • Saltar ImageView mientras arrastra. Los valores de getX () y getY () saltan
  • OnTouch funciona, pero OnClickListener no?
  • OnTouchListener para toda la pantalla
  • Limitación de Drag de ImageView en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.