2016-11-16 4 views
0

특정 확인란을 선택했을 때보기를 표시하거나 숨기는 데 도움이되는 두 가지 간단한 방법을 만들었습니다. 체크 상자와 뷰를 초기화하는 Init 메서드와 체크 상태 변경 리스너 내부에서 호출되는 토글 메서드가 있으며 뷰 상태를 애니메이션으로 토글합니다.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); 
} 

그것은 알파 애니메이션으로 잘 작동하지만, 치료와 동일한 방법으로 초기화되지만, 번역 애니메이션 작은 문제가있다. 왜?

특히 확인란 상태가 변경 될 때마다 번역이 잘 작동하지만 체크 상자가 시작되면보기가 보이지 않도록 VERY FIRST 상태 변경시에만보기가 알파 애니메이션으로 표시되지만 번역 애니메이션은 수행하지 않습니다 . 보기가 방금 생성되었을 때 번역 상태는 초기화되지 않고, 알파 상태는 toggleViewVisibilityInit() 메소드에서 수행되는 것처럼 보입니다.

왜 이런 일이 발생해야하는지 알 수 있습니까? 보기가 작성되는 즉시 번역이 고려되지 않은 것처럼 보입니다.

답변

1

보기가 아직 그려져 있지 않으므로 높이를 알 수 없습니다 (따라서 0 임).

알고 계시면 해결책을 찾는 것이 쉽습니다 (예 : getWidth() and getHeight() of View returns 0

희망이 있습니다.

+0

감사합니다. 나는 그런 것을 의심했지만, 그 점을 발견 할 수 없었다. 이것은 나를 많이 돕는다. –