ValueAnimator 의 소개 와 사용
3957 단어 Androidapi 사용사용자 정의 애니메이션
소개 하기 전에 그림 을 살 펴 보 자. 그러면 그림 에서 보 여 준 효 과 는 어떻게 이 루어 졌 을 까?오늘 우리 의 주인공 인 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();
결과: 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 로 세 가지 모드 가 있 습 니 다.
현재 예 에서 컨트롤 의 폭 은 정확 한 값 이 므 로 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
앞으로 저 는 계속해서 여러분 과 안 드 로 이 드 에 관 한 지식 과 기 교 를 공유 할 것 입 니 다. 여러분 의 관심 을 환영 합 니 다. 우 리 는 함께 공부 하고 발전 할 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.