Spostare gli events DOPO LongPress

Come posso ascoltare gli events di spostamento dopo che il LongPress è calato nel mio GestureDetector?

Quando l'utente LongClick inizia la modalità di selezione e può trascinare un quadrato nella schermata. Ma ho notato che l'onScroll non è chiamato dopo che LongPress è consumato.

  • VolleyPlus: NetworkDispatcher.run: exception non gestita java.lang.NullPointerException
  • Android Google Map V2: Come modificare l'icona del marcatore precedentemente cliccato quando cliccato su un altro marcatore
  • Android BroadcastReceiver non interrompe l'azione Intent Camera
  • org.ksoap2.serialization.SoapSerializationEnvelope
  • Come superare il limite di 65535 byte per il codice di metodo
  • Rendering di SurfaceTexture all'Unità Texture2D
  • Cattura Fare clic su una visualizzazione personalizzata in Android
  • Preview di Android Camera su uno schermo quadrato allungato
  • Come posso aggiungere un nuovo calendario telefonico a Android?
  • Come scattare foto dalla camera senza anteprima quando inizia la mia applicazione?
  • Utilizza Google Maps offline in un'applicazione
  • SVG a forma di Android
  • 2 Solutions collect form web for “Spostare gli events DOPO LongPress”

    Ha provato a combattere questo per un po ', e per ora la soluzione è:

    1. Distriggersre il longpress utilizzando setIsLongpressEnabled (isLongpressEnabled) nel gestoreDetector

    Ecco il mio metodo OnTouch della mia vista:

     public boolean onTouchEvent(MotionEvent event) { if (mGestureDetector.onTouchEvent(event)== true) { //Fling or other gesture detected (not logpress because it is disabled) } else { //Manually handle the event. if (event.getAction() == MotionEvent.ACTION_DOWN) { //Remember the time and press position Log.e("test","Action down"); } if (event.getAction() == MotionEvent.ACTION_MOVE) { //Check if user is actually longpressing, not slow-moving // if current position differs much then press positon then discard whole thing // If position change is minimal then after 0.5s that is a longpress. You can now process your other gestures Log.e("test","Action move"); } if (event.getAction() == MotionEvent.ACTION_UP) { //Get the time and position and check what that was :) Log.e("test","Action down"); } } return true; } 

    Il mio dispositivo ha restituito ACTION_MOVE each volta che tieno dito sullo schermo. Se il tuo doesnt, basta controllare lo stato di una certa bandiera premuta dopo 0.5s usando un timer o un thread.

    Spero possa aiutare!

    Ho fatto questo task utilizzando i seguenti concetti:

    Supponiamo di avere la Vista di image e premere a lungo, l'image all'interno di questa image. La vista potrebbe essere trascinata e posizionata all'interno di un'altra visione (ad esempio un layout relativo) Impostare MyClickListner sul metodo setOnLongClickListener () della visualizzazione image.

      private final class MyClickListener implements View.OnLongClickListener { // called when the item is long-clicked @Override public boolean onLongClick(View view) { // TODO Auto-generated method stub // create it from the object's tag ClipData.Item item = new ClipData.Item((CharSequence)view.getTag()); String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN }; ClipData data = new ClipData(view.getTag().toString(), mimeTypes, item); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); view.startDrag( data, //data to be dragged shadowBuilder, //drag shadow view, //local data about the drag and drop operation 0 //no needed flags ); // view.setVisibility(View.INVISIBLE); return true; } } 

    Quindi impostare MyDragListner sul layout relativo (ad es. BigImageRelativeLayoutVw.setOnDragListener (nuovo MyDragListener ());)

      class MyDragListener implements View.OnDragListener { @Override public boolean onDrag(View v, DragEvent event) { int X=(int)event.getX(); int Y=(int)event.getY(); int touchX = 0,touchY=0; // Handles each of the expected events switch (event.getAction()) { //signal for the start of a drag and drop operation. case DragEvent.ACTION_DRAG_STARTED: // do nothing break; //the drag point has entered the bounding box of the View case DragEvent.ACTION_DRAG_ENTERED: break; //the user has moved the drag shadow outside the bounding box of the View case DragEvent.ACTION_DRAG_EXITED: // v.setBackground(normalShape); //change the shape of the view back to normal break; //drag shadow has been released,the drag point is within the bounding box of the View case DragEvent.ACTION_DROP: // if the view is the bottomlinear, we accept the drag item if(v == bigImageRelativeLayoutVw) { View view = (View) event.getLocalState(); touchX=X-viewCoords[0]-20; touchY=Y-viewCoords[1]-20; View view1=new View(getActivity()); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30,30); layoutParams.leftMargin =touchX; layoutParams.topMargin = touchY; view1.setBackgroundResource(R.drawable.heavy_damage); view1.setLayoutParams(layoutParams); RelativeLayout containView = (RelativeLayout) v; containView.addView(view1); view.setVisibility(View.VISIBLE); } else { View view = (View) event.getLocalState(); view.setVisibility(View.VISIBLE); break; } break; //the drag and drop operation has concluded. case DragEvent.ACTION_DRAG_ENDED: // v.setBackground(normalShape); //go back to normal shape default: break; } return true; } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.