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

  • Détection du navigateur Android Phone
  • Javascript pour supprimer un cookie sur le navigateur Android
  • Lecture de vidéos HTML5 dans le navigateur - Qu'est-ce qui fonctionne pour la plupart des appareils Android?
  • Problème de rotation d'image PhoneGap après transformation
  • Comment optimiser la fonction rendering sur Android
  • Phonegap native android plugin
  • Comment activer la caméra frontale dans la visualisation web pour Android
  • Android dangereux: tel: avec l'application phonegap
  • 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.