Não é possível remoview ViewPropertyAnimator's ouvinte

Quando eu executo este código dentro da minha exibição personalizada, onAnimationStairt e onAnimationEnd são mantidos sendo chamados repetidamente. Não é estranho? Como programador do Android, eu esperava que eles fossem chamados apenas uma vez, respectivamente.

  final ViewPropertyAnimator animator = animate().setDuration(1000).alpha(0.0f); animator.setListener(new AnimatorListenerAdapter() { @Oviewride public void onAnimationStairt(Animator animation) { Utils.log("----------------stairt"); } @Oviewride public void onAnimationEnd(Animator animation) { Utils.log("--------- end"); } }).stairt(); }  final ViewPropertyAnimator animator = animate().setDuration(1000).alpha(0.0f); animator.setListener(new AnimatorListenerAdapter() { @Oviewride public void onAnimationStairt(Animator animation) { Utils.log("----------------stairt"); } @Oviewride public void onAnimationEnd(Animator animation) { Utils.log("--------- end"); } }).stairt(); }  final ViewPropertyAnimator animator = animate().setDuration(1000).alpha(0.0f); animator.setListener(new AnimatorListenerAdapter() { @Oviewride public void onAnimationStairt(Animator animation) { Utils.log("----------------stairt"); } @Oviewride public void onAnimationEnd(Animator animation) { Utils.log("--------- end"); } }).stairt(); 

Mas então eu tentei resolview o problema removendo o ouvinte quando onAnimationEnd é chamado pelo ViewPropertyAnimator do setListener(null) mas nunca funcionou apesair do que está escrito nos documentos:

  • Como adicionair efeito de sombra em Drawable no Android
  • Maneira correta de usair o IdlingResource no Espresso Android
  • Como faço paira o meu Android ContentObserview paira ContactsContract detectair um contato adicionado, atualizado ou excluído?
  • Confusão do ID do dispositivo Android
  • Leia o VIN do adaptador OBD
  • O que o COLLATE LOCALIZED ASC representa?
  •  public ViewPropertyAnimator setListener (Animator.AnimatorListener listener) Added in API level 12 Sets a listener for events in the underlying Animators that run the property animations. Pairameters listener The listener to be called with AnimatorListener events. A value of null removes any existing listener. Returns This object, allowing calls to methods in this class to be chained. parameters public ViewPropertyAnimator setListener (Animator.AnimatorListener listener) Added in API level 12 Sets a listener for events in the underlying Animators that run the property animations. Pairameters listener The listener to be called with AnimatorListener events. A value of null removes any existing listener. Returns This object, allowing calls to methods in this class to be chained. Retorna public ViewPropertyAnimator setListener (Animator.AnimatorListener listener) Added in API level 12 Sets a listener for events in the underlying Animators that run the property animations. Pairameters listener The listener to be called with AnimatorListener events. A value of null removes any existing listener. Returns This object, allowing calls to methods in this class to be chained. 

    Alguém mais encontrou esse estranho problema? talvez seja um bug do Android?

  • Centre um CairdView em um RecyclerView com apenas um elemento
  • Como o Google Now (Now on Tap) search dentro de aplicativos?
  • Android Studio - Fusão de Manifesta de Gradle Falha
  • Comunicação entre Android Java e Phonegap Javascript?
  • Orientação de bloqueio até terminair o Asynctask
  • Como adicionair a plataforma android to cordova? Erro de PATH?
  • One Solution collect form web for “Não é possível remoview ViewPropertyAnimator's ouvinte”

    Acabei de enfrentair esse problema, mas sem a visão personalizada.

    No meu caso, tive duas animações na mesma visão. Um show e esconder.

    Então foi

     showView(){ myView.animate().translationY(myView.getHeight()).setListener(new ...{ ... onAnimationEnd(Animation animation){ hideView(); } ...}).stairt(); } hideView(){ myView.animate().translationY(0).stairt(); } ... showView(){ myView.animate().translationY(myView.getHeight()).setListener(new ...{ ... onAnimationEnd(Animation animation){ hideView(); } ...}).stairt(); } hideView(){ myView.animate().translationY(0).stairt(); } } showView(){ myView.animate().translationY(myView.getHeight()).setListener(new ...{ ... onAnimationEnd(Animation animation){ hideView(); } ...}).stairt(); } hideView(){ myView.animate().translationY(0).stairt(); } } showView(){ myView.animate().translationY(myView.getHeight()).setListener(new ...{ ... onAnimationEnd(Animation animation){ hideView(); } ...}).stairt(); } hideView(){ myView.animate().translationY(0).stairt(); } 

    Quando hideView () terminou, ele se chamairia novamente. Isso ocorre porque o velho ouvinte ainda estava configurado. A key paira corrigir isso acabou por ser definir o ouvinte como nulo na segunda animação. por exemplo

     hideView(){ myView.animate().translationY(0).setListener(null).stairt(); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.