ValueAnimator 의 소개 와 사용

전재 출처 작성 자: AboutJoke (http://blog.csdn.net/u013200308 ) 원본 링크:http://blog.csdn.net/u013200308/article/details/51250217
소개 하기 전에 그림 을 살 펴 보 자. 그러면 그림 에서 보 여 준 효 과 는 어떻게 이 루어 졌 을 까?오늘 우리 의 주인공 인 ValueAnimator 를 사용 해 야 합 니 다.우선 공식 소 개 를 살 펴 보 자.
이 종 류 는 애니메이션 값 을 계산 하고 대상 으로 설정 하 는 간단 한 순차 엔진 을 제공 합 니 다.기본 적 인 상황 에서 ValueAnimator 는 비 선형 시간 대 플러그 인 을 사용 하고 AccelerateDecelerateInterpolator 류 를 통 해 가속 과 속 도 를 줄 이 는 애니메이션 을 사용 합 니 다.이 행 위 는 setinterpolator 를 호출 하여 변경 할 수 있 습 니 다.
위의 내용 을 보면 ValueAnimator 는 애니메이션 이 라 고 할 수 없다. 왜냐하면 이것 은 일련의 복잡 한 계산 을 통 해 하나의 값 을 비 선형 으로 다른 값 으로 변화 시 키 기 때문이다.먼저 demo 를 통 해 알 아 보 겠 습 니 다.
    //   int... values         , 0,25,50
    ValueAnimator animator=ValueAnimator.ofInt(0,25,50);//  0 -25 -50
    animator.addUpdateListener(new AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int value=(Integer) animation.getAnimatedValue();  //           
            System.out.println(value);
        }
    });
    animator.setDuration(300);
    animator.start();

결과: ValueAnimator的介绍与使用_第1张图片 logcat 에서 우 리 는 0 에서 50 의 변 화 를 진 행 했 고 변화의 값 이 무 작위 로 증가 했다 는 것 을 똑똑히 알 수 있다.이해 가 끝나 면 글 이 시 작 된 도 례 를 실현 합 시다.
먼저 그림 의 애니메이션 효 과 를 실현 하려 면 이 컨트롤 의 높이 를 ValueAnimator 의 변 화 를 진행 하면 됩 니 다.그렇다면 우 리 는 우선 이 컨트롤 의 높이 를 얻어 야 한다.많은 학우 들 이 getMeasure Height () 를 사용 하면 된다 고 말 할 것 이다. 여기 서 는 그 럴 수 없다.왜 일 까요?이 컨트롤 의 높이 는 변화 하고 있 기 때문에 실제 높이 를 가 져 와 야 합 니 다. 그러면 이 컨트롤 의 높이 를 다시 측정 해 야 합 니 다.
 private int getMeasureHeight() {
    //       
    int width = safe_content.getMeasuredWidth();
    //           
    safe_content.getLayoutParams().height = LinearLayout.LayoutParams.WRAP_CONTENT;
    //          1:     2:     mode
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
    //                 1000,     
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(1000, MeasureSpec.AT_MOST);
    safe_content.measure(widthMeasureSpec, heightMeasureSpec);
    return safe_content.getMeasuredHeight();
}

측정 규칙 을 만 드 는 데 사용 되 는 MakeMeasureSpec () 방법 이 사 용 됩 니 다.매개 변수 1 은 크기, 즉 컨트롤 의 너비 나 높이 를 측정 해 야 합 니 다.매개 변수 2 는 컨트롤 을 측정 하 는 mode 로 세 가지 모드 가 있 습 니 다.
  • AT_MOST: 컨트롤 의 크기 가 원 하 는 값 에 도달 할 수 있 습 니 다.
  • EXACTLY: 컨트롤 이 주 는 값 을 부여 합 니 다.
  • UNSPECIFIED: 제약 이 없습니다. 원 하 는 값 일 수 있 습 니 다.

  • 현재 예 에서 컨트롤 의 폭 은 정확 한 값 이 므 로 EXACTLY 를 사용 합 니 다.컨트롤 의 높이 는 확실 하지 않 기 때문에 우 리 는 먼저 컨트롤 내용 을 감 싼 다음 에 비교적 큰 값 을 입력 하여 시스템 에 맡 겨 측정 하면 컨트롤 의 높이 를 얻 을 수 있 습 니 다.
        //    
        ValueAnimator animator = ValueAnimator.ofInt(startHeight, targetHeight);
        final LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) safe_content.getLayoutParams();
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  //       
    
            @Override
            public void onAnimationUpdate(ValueAnimator animator) {
                int value = (Integer) animator.getAnimatedValue();//            
                layoutParams.height = value;
                safe_content.setLayoutParams(layoutParams);//     
            }
        });
    

    ValueAnimator 를 실행 하면 변 화 된 높이 를 컨트롤 의 높이 에 설정 하면 접 고 펼 치 는 애니메이션 효 과 를 실현 할 수 있 습 니 다.이렇게 해서 우 리 는 그림 의 첫 번 째 애니메이션 을 완 성 했 고 두 번 째 애니메이션 은 첫 번 째 애니메이션 과 다 릅 니 다. 이것 은 고정된 높이 에서 변화 하기 시 작 했 기 때문에 우 리 는 측정 할 때 변 화 를 해 야 합 니 다. 관심 이 있 는 학생 들 은 어떻게 변화 하 는 지 스스로 시도 해 볼 수 있 습 니 다. 완전한 코드 는 글 의 끝 에 제 시 될 것 입 니 다.
    데모 다운로드 주소:
    https://github.com/AboutJoke/ValueAnimator
    앞으로 저 는 계속해서 여러분 과 안 드 로 이 드 에 관 한 지식 과 기 교 를 공유 할 것 입 니 다. 여러분 의 관심 을 환영 합 니 다. 우 리 는 함께 공부 하고 발전 할 것 입 니 다.

    좋은 웹페이지 즐겨찾기