android - example - ValueAnimator가있는 LinearLayout 컨테이너 높이의 애니메이션



android set objectanimator (1)

이 블로그 게시물을 보면 : http://tech.chitgoks.com/2011/10/29/android-animation-to-expand-collapse-view-its-children/ view.invalidate() 를 사용하여 레이아웃을 다시 그립니다. view.requestLayout() 사용해야합니다.

따라서 코드는 다음과 같이됩니다.

ValueAnimator va = ValueAnimator.ofInt(0, height);
    va.setDuration(700);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {
            Integer value = (Integer) animation.getAnimatedValue();
            v.getLayoutParams().height = value.intValue();
            v.requestLayout();
        }
    });

애니메이션을 동적으로 만들기 위해서 LinearLayout의 높이를 얻는 방법에 대한 노트를 추가하기를 원했습니다. 높이를 얻으려면 모든 견해를 먼저 그려야합니다. 우리는 그 그림이 끝났음을 알려주는 사건을 경청해야합니다. 이것은 다음과 같은 onResume () 메소드에서 수행 할 수 있습니다 (필자는 필자가 xml에서 높이에 대해 wrap_content에 컨테이너를 선언했음을 알 수 있습니다. 시작부터 숨기고 싶기 때문에 볼 수 있습니다).

@Override
    public void onResume() {
        super.onResume();
        final ViewTreeObserver vto = filterContainer.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                height = filterContainer.getHeight();
                filterContainer.setVisibility(View.GONE);
                filterContainer.getLayoutParams().height = 0;
                filterContainer.requestLayout();
                ViewTreeObserver obs = filterContainer.getViewTreeObserver();
                obs.removeGlobalOnLayoutListener(this);
            }
        });
    }

LinearLayout을 사용하여 일부 버튼의 컨테이너로 사용하고 사용자가 "표시"버튼을 누를 때 레이아웃이 아래로 내려 오는 느낌을주기 위해 높이를 애니메이션화하려는 textview입니다.

LinearLayout을 layout_height = "0dp"로 설정하고 visibility = "내 XML에서 사라짐"을 설정했습니다. 그런 다음 내용을 감싸는 데 필요한 높이를 표시하도록 설정합니다. 지금은 전혀 애니메이션을 적용하는 데 문제가있어 랩 콘텐츠의 높이가 걱정되지 않습니다.

내 애니메이션 방법은 다음과 같습니다.

private void toggle(final LinearLayout v) {
    v.setVisibility(View.VISIBLE);
    ValueAnimator va = ValueAnimator.ofInt(0, 300);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {
            Integer value = (Integer) animation.getAnimatedValue();
            v.getLayoutParams().height = value.intValue();
            v.invalidate();

        }
    });

    va.start();
}

아마도 문제는 LinearLayout의 높이를 설정하는 방법입니다. 아니면 ValueAnimator의 기능을 오해하고 있습니까? Chet Haase의 블로그 게시물을 둘러 보았지만 구체적인 높이 애니메이션 예제는 포함되어 있지 않습니다. 나도 3.0+에서 API를 사용하여 높이의 애니메이션 작업 방법을 찾아 낼 수 없었습니다. 이 덕분에 도움이 될 것입니다, 감사합니다!





android-linearlayout