2017-09-06 1 views
0

Ich habe einen Listener, der zuhört und fokussierte Objekte mit Animation ein wenig größer macht.Benutzerdefinierte Animation löst zweimal aus

private fun focus() { 
    itemView?.setOnFocusChangeListener { _, hasFocus -> 
     if (hasFocus) { 
      val anim : Animation = AnimationUtils.loadAnimation(itemView.context, R.anim.scale_in) 
      itemView.startAnimation(anim) 
      anim.fillAfter = true 
     } else { 
      val anim : Animation = AnimationUtils.loadAnimation(itemView.context, R.anim.scale_out) 
      itemView.startAnimation(anim) 
      anim.fillAfter = true 
     } 
    } 
} 

Neben diesem Hörer ich auch benutzerdefinierte Funktion gemacht, dass, wenn fokussierte Element geklickt wird, ändert sich tatsächlich Größe wieder normal

fun customFunction(): Unit = with(itemView) { 
    val anim : Animation = AnimationUtils.loadAnimation(itemView.context, R.anim.scale_out) 
    itemView.startAnimation(anim) 
    anim.fillAfter = true 
} 

PROBLEM:focus() und customFunction() Funktionen in Ordnung arbeiten. Das Problem ist, wenn ich auf ein fokussiertes Element (customFunction() trigger) trete und das Element seine Größe auf normal ändert - was okay ist. Aber in dem Moment, in dem ich zu einem anderen Element navigiere, skaliert das vorherige zweimal. Wie muss ich meinen onFocusListener ändern, um zu wissen, dass ich nicht zweimal skalieren sollte, wenn ich customFunction() ausgelöst habe, indem ich auf ein Element geklickt habe. Jede Idee ist willkommen.

Antwort

0

wenn ich recht verstehe Ihre Frage können Sie versuchen haben: itemView. setOnFocusChangeListener(null); in Ihrem customFunction()

+0

dies nicht funktioniert – JoshuaMad

Verwandte Themen