Set Drag Listener sur SpannableString

Je tente de définir un OnDragListener à certains mots d'un TextView utilisant SpannableString . Je peux ajouter un OnClick Listener en utilisant ClickableSpan

en faisant

 hashText.setSpan(new ClickableSpan() { 

J'ai donc pensé que je tenterais la même chose, mais remplacer OnDragListener avec OnDragListener .

Je peux lire les différents événements de traînée, mais je n'ai pas pu isoler les événements de glisser sur les mots spécifiques que je choisis, comme je peux le faire avec ClickableSpan .

 hashText.setSpan(new View.OnDragListener() { @Override public boolean onDrag(View targetView, DragEvent event) { int action = event.getAction(); TextView targetVariable = (TextView) targetView; String textGetter; textGetter = targetVariable.getText().toString(); // boolean actionDropOutside = (DragEvent.ACTION_DRAG_ENDED != DragEvent.ACTION_DROP); switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: Log.d(TAG, "DRAG STARTED"); break; case DragEvent.ACTION_DRAG_ENTERED: ////create method that checks if text is empty if so lights up //if (textGetter.equals("")) { targetView.setBackgroundColor(CARD_SLECTED); //lightupVariableCard(cardV); Log.d(TAG, "DRAG ENTERED EMPTY TEXT"); //} Log.d(TAG, "DRAG ENTERED" + targetVariable.getText().toString()); break; case DragEvent.ACTION_DRAG_EXITED: targetView.setBackgroundColor(CARD_UNSLECTED); Log.d(TAG, "DRAG EXITED"); break; case DragEvent.ACTION_DROP: // Dropped, reassign View to ViewGroup //if (textGetter.equals("")) { TextView draggedView = (TextView) event.getLocalState(); ViewGroup owner = (ViewGroup) draggedView.getParent(); targetVariable.setText(draggedView.getText()); owner.setVisibility(View.INVISIBLE); targetView.setBackgroundColor(CARD_UNSLECTED); //fabDisplayCounter++; //displayFab(); Log.d(TAG, "DRAG DROPPED"); //} Log.d(TAG, "DRAG NOT POSSSIBLE HERE"); break; case DragEvent.ACTION_DRAG_ENDED: // if (actionDropOutside == true){ // Log.d(TAG, "DRAG DROPPED OUTSIDE TRUE"); // } Log.d(TAG, "DRAG ENDED"); //default: } return true; } }, matcher.start(), matcher.end(), i); the_question.setText(hashText); the_question.setMovementMethod(LinkMovementMethod.getInstance()); //the_question.setOnDragListener(new MyDragListener(hashText.nextSpanTransition())); 

  • Phonegap, jQueryMobile et service Web
  • Quel est votre flux de travail pour tester Cloud Code sur Parse?
  • Est-il possible de déclencher le partage du menu sur les smartphones (via HTML / JS)?
  • Les fenêtres et les événements flous ne fonctionnent pas correctement sur le navigateur Android
  • Javascript ne fonctionne pas dans une activité WebView
  • Capture audio / vidéo dans PhoneGap / Cordova en utilisant un plugin Java externe
  • Android appelant des fonctions JavaScript dans WebView
  • Rediriger vers la boutique d'appours ou Google Play
  • One Solution collect form web for “Set Drag Listener sur SpannableString”

    Je ne suis pas un grand expert dans ce domaine, je n'ai jamais eu à le détruire. Mais puisque vous n'avez aucune réponse, j'essaie de vous donner un indice / direction.

    Je pense que ce dont vous avez besoin, c'est un MovementMethod personnalisé.

    La plate-forme Android MovementMethod est gérée ici dans ce paquet: https://github.com/android/platform_frameworks_base/tree/master/core/java/android/text/method

    Spécifiquement, cette interface: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/MovementMethod.java

    Comme vous le voyez, il existe une méthode onTouchEvent() .

    ClickableSpan a une méthode onClick, mais cela ne fonctionne que parce qu'il existe un LinkMovementMethod traitant les événements tactiles, en recherchant onClick() et en publiant onClick() sur eux.

    Voir: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/LinkMovementMethod.java

    Qui s'étendent: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/ScrollingMovementMethod.java

    Qui étendent https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/BaseMovementMethod.java

    Mais ce dernier n'est pas vraiment lié aux touches.

    ScrollingMovementMethod utilise la classe Touch pour déléguer la gestion des événements tactiles, vous pouvez voir cette classe ici: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/method/Touch.java

    En regardant le code très rapidement, je pense que vous pouvez étendre le LinkMovementMethod et ajouter la détection de traînée là-bas. Ensuite, créez un nouveau type Span pour Drag et appelez les méthodes de glisser à l'intérieur.

    Je sais que je ne vous ai pas donné une solution, mais j'espère que je vous ai indiqué dans la bonne direction.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.