2017-06-10 7 views
0

Existe-t-il un moyen d'implémenter l'écouteur on click sur le dessin à droite d'un EditText en utilisant RxBinding?rxbinding et cliquez sur le dessinable à droite

La seule chose que je trouve est:

 RxTextView.editorActionEvents(mEditText).subscribeWith(new DisposableObserver<TextViewEditorActionEvent>() { 
     @Override 
     public void onNext(TextViewEditorActionEvent textViewEditorActionEvent) { 
      int actionId = textViewEditorActionEvent.actionId(); 
      if(actionId == MotionEvent.ACTION_UP) { 
      } 

     } 

     @Override 
     public void onError(Throwable e) { 

     } 

     @Override 
     public void onComplete() { 

     } 
    }); 

Mais dans ce cas je ne peux pas trouver les informations sur la position du clic.

Ceci est la façon dont je l'ai fait en utilisant RxJava:

public Observable<Integer> getCompoundDrawableOnClick(EditText editText, int... drawables) { 
    return Observable.create(e -> { 
     editText.setOnTouchListener((v, event) -> { 
      if (event.getAction() == MotionEvent.ACTION_UP) { 
       for (int i : drawables) { 
        if (i == UiUtil.COMPOUND_DRAWABLE.DRAWABLE_RIGHT) { 
         if (event.getRawX() >= (editText.getRight() - editText.getCompoundDrawables()[i].getBounds().width())) { 
          e.onNext(i); 
          return true; 
         } 
        } 
       } 
      } 
      // add the other cases here 
      return false; 

     }); 
    }); 

mais je sens que je réinvente la roue

Répondre

1

Vous recherchez au mauvais endroit, si vous avez besoin de vérifier la Evénement tactile, utilisez l'événement tactile de base View en utilisant RxView, puis appliquez votre logique et filtrez toutes les touches non requises, pour avoir des «clics» sur votre emplacement souhaité (composé pouvant être tracé).
Je dois admettre que je ne suis pas sûr que je comprend la logique pour la boucle, vous pouvez utiliser directement le UiUtil.COMPOUND_DRAWABLE.DRAWABLE_RIGHT, mais de toute façon suivie votre logique dans cet exemple:

public Observable<Object> getCompoundDrawableOnClick(EditText editText, int... drawables) { 
     return RxView.touches(editText) 
       .filter(motionEvent -> { 
        if (motionEvent.getAction() == MotionEvent.ACTION_UP) { 
         for (int i : drawables) { 
          if (i == UiUtil.COMPOUND_DRAWABLE.DRAWABLE_RIGHT) { 
           if (motionEvent.getRawX() >= (editText.getRight() - editText.getCompoundDrawables()[i].getBounds().width())) { 
            return true; 
           } 
          } 
         } 
        } 
        return false; 
       }) 
       .map(motionEvent -> { 
        // you can omit it if you don't need any special object or map it to 
        // whatever you need, probably you just want click handler so any kind of notification Object will do. 
       }); 
    }