2016-11-16 24 views
0

Я создал два коротких метода, чтобы помочь мне показать или скрыть представление, когда установлен определенный флажок. У меня есть метод Init, в котором я инициализирую флажок и представление, и метод toggle, который вызывается изнутри переключателя изменения статуса флажка и переключает состояние представления с помощью анимации.setTranslationY неправильно инициализирован

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

Он отлично работает с альфа-анимацией, но есть небольшая проблема с переводом анимацией, хотя они рассматриваются и инициализируются в точно так же. Зачем?

В частности, перевод работает отлично, когда изменяется статус флажка, но когда флажок начинает работать, так что вид невидим, только при статусе ОЧЕНЬ ПЕРВЫЙ вид открывается с альфа-анимацией, но не выполняет анимацию перевода , Похоже, что когда представление только что было создано, его статус перевода не инициализируется, а альфа-статус, хотя и выполняется в методе toggleViewVisibilityInit().

Кто-нибудь знает, почему это должно произойти? Похоже, как только создается представление, перевод не принимается во внимание.

ответ

1

Вид еще не нарисован, поэтому высота неизвестна (при этом равна 0).

Если вы знаете это, легко найти решения, например. getWidth() and getHeight() of View returns 0

Надеюсь, это поможет!

+0

спасибо. Я подозревал что-то подобное, но я не мог найти смысла. Это очень помогает мне. –