2016-11-16 5 views
0

Ich habe zwei kurze Methoden erstellt, die mir helfen, eine Ansicht ein- oder auszublenden, wenn ein bestimmtes Kontrollkästchen aktiviert ist. Ich habe eine Init-Methode, in der ich eine Checkbox und eine Ansicht initialisiere, und eine Toggle-Methode, die innerhalb des Checkbox Status Change Listener aufgerufen wird und den View-Status mit einer Animation umschaltet.setTranslationY nicht korrekt initialisiert

void toggleViewVisibility(final boolean b, final View v) { 
    v.setAlpha(b ? 0.0f : 1.0f); 
    v.setTranslationY(b ? v.getHeight() : 0); 
    if (b) { 
     v.setVisibility(View.VISIBLE); 
     v.animate().alpha(1.0f).translationY(0).setDuration(400); 
    } else { 
     v.animate().alpha(0.0f).translationY(v.getHeight()).setDuration(400).setListener(new Animator.AnimatorListener() { 
      @Override public void onAnimationStart(Animator animator) {} 
      @Override public void onAnimationEnd(Animator animator) { v.setVisibility(View.GONE); } 
      @Override public void onAnimationCancel(Animator animator) {} 
      @Override public void onAnimationRepeat(Animator animator) {} 
     }); 
    } 
} 

void toggleViewVisibilityInit(final boolean b, final View v, final AnimateCheckBox c) { 
    v.setAlpha(b ? 1.0f : 0.0f); 
    v.setTranslationY(b ? 0 : v.getHeight()); 
    v.setVisibility(b ? View.VISIBLE : View.GONE); 
    c.setChecked(b); 
} 

Es arbeitet mit der Alpha-Animation, in Ordnung, aber ein kleines Problem mit der Übersetzung Animation hat, obwohl sie in der exakt gleichen Art und Weise behandelt werden und initialisiert. Warum?

Insbesondere funktioniert die Übersetzung immer dann, wenn sich der Checkbox-Status ändert, aber wenn die Checkbox startet, ist die Ansicht unsichtbar, nur bei der SEHR ERSTEN Statusänderung erscheint die Ansicht mit Alpha-Animation, führt aber keine Übersetzungs-Animation aus . Es sieht so aus, wenn der View gerade erstellt wurde, wird der Übersetzungsstatus nicht initialisiert, während der Alpha-Status ist, obwohl dies in der toggleViewVisibilityInit() -Methode geschieht.

Weiß jemand, warum das passieren sollte? Es sieht so aus, dass sobald die Ansicht erstellt wird, die Übersetzung nicht berücksichtigt wird.

Antwort

1

Die Ansicht ist noch nicht gezeichnet, daher ist ihre Höhe unbekannt (entspricht also 0).

Wenn Sie das wissen, ist es einfach, nach Lösungen zu suchen, z. getWidth() and getHeight() of View returns 0

Hoffe, das hilft!

+0

Vielen Dank. Ich vermutete so etwas, aber ich konnte den Punkt nicht finden. Das hilft mir sehr. –

Verwandte Themen