Android 속성 애니메이션 Property Animation 시리즈 2 의 ObjectAnimator
앞의 블 로 그 는 안 드 로 이 드 속성 애니메이션 Property Animation 시리즈 의 ValueAnimator 에 관 한 지식 과 어떻게 사용 하 는 지 해석 했다.이 블 로 그 는 안 드 로 이 드 속성 애니메이션 ObjectAnimator 류 의 사용 을 계속 해석 하고 있다.
ObjectAnimator
ValueAnimator 류 에 비해 ObjectAnimator 는 한 대상 에 진정 으로 작용 할 수 있 기 때문에 더욱 실 용적 입 니 다.그러나 오 브 젝 트 애 니 메 이 터 는 밸 류 애 니 메 이 터 로부터 물 려 받 은 것 이기 때문에 주 된 방법 은 밸 류 애 니 메 이 터 에서 이 루어 진 것 이다.그럼 오 브 젝 트 애 니 메 이 터 의 사용 을 살 펴 보 자.상용 방법 은 다음 과 같다. ofFloat (), ofInt (), ofObject (), ofArgb (), ofProperty Values Holder ().
ObjectAnimator 사용
평이 하 다
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "translationX", 0.0f, 350.0f, 0f);
animator.setDuration(2500).start();
of Float () 방법의 첫 번 째 매개 변 수 는 애니메이션 작업 의 대상 (임의의 대상 일 수 있 음) 을 나타 내 고 두 번 째 매개 변 수 는 작업 대상 의 속성 이름 (대상 이 있 는 속성 이 라면 모두 가능 함) 을 나타 내 며 세 번 째 매개 변 수 는 애니메이션 과도 값 이다.물론 과도 한 값 은 N 개 까지 있 을 수 있 습 니 다. 하나의 값 이 라면 기본 값 은 애니메이션 과도 값 의 끝 값 입 니 다.N 개의 값 이 있 으 면 애니메이션 은 이 N 개의 값 사 이 를 과도 합 니 다.
크기 조정
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "scaleX", 1.0f, 1.5f);
animator.setDuration(2000).start();
회전 애니메이션
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "rotationX", 0.0f, 90.0f,0.0F);
animator.setDuration(2000).start();
투명도 애니메이션
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.3f, 1.0F);
animator.setDuration(2000);//
너무 쉬 운 것 같 지 않 아 요?두 줄 의 코드 는 하나의 애니메이션 효 과 를 실현 할 수 있 습 니 다. 물론 간단 한 애니메이션 설정 일 뿐 입 니 다. 만약 에 더 좋 은 효과 애니메이션 이 필요 하 다 면 이런 방법 으로 설정 할 수 있 습 니 다.
자세 한 애니메이션 설정 은 다음 과 같 습 니 다.
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.3f, 1.0F);
animator.setDuration(2000);//
animator.setInterpolator(new BounceInterpolator());//
animator.setRepeatCount(-1);//
animator.setRepeatMode(ValueAnimator.RESTART);//
animator.setStartDelay(1000);//
animator.start();//
자신의 수요 에 따라 설정 조정 할 수 있 습 니 다.
조합 애니메이션
위 에서 우리 가 본 것 은 모두 하나의 애니메이션 인 데 조합 애니메이션 을 실현 하려 면 어떻게 해 야 합 니까?조급해 하지 마 세 요. 안 드 로 이 드 엔 지 니 어 는 우리 에 게 두 가지 방법 을 제공 해 주 었 습 니 다. Animator Set 류, ObjectAnimator. of Property Values Holder () 방법 입 니 다.
그룹 애니메이션 1 – Animator Set 사용
이 클래스 는 play () 방법 을 제공 합 니 다. 이 방법 에 Animator 대상 (ValueAnimator 또는 ObjectAnimator) 을 입력 하면 Animator Set. Builder 의 인 스 턴 스 를 되 돌려 줍 니 다. Animator Set. Builder 에는 다음 과 같은 네 가지 방법 이 포함 되 어 있 습 니 다.
after (Animator anim) 기 존 애니메이션 을 들 어 오 는 애니메이션 에 삽입 한 후 after (long delay) 를 실행 합 니 다.
좋 습 니 다. 이런 방법 이 있 으 면 우 리 는 조합 애니메이션 을 실현 합 니 다. 그림 의 투명 성 이 투명 하지 않 고 0.2 의 투명 에서 불투명 으로 시작 합 니 다. 전체 레이아웃 배경의 색상 변화 에 따라 ImageView 는 먼저 오른쪽으로 200 개의 픽 셀 을 이동 한 다음 에 2 배 확대 한 다음 에 X 축 을 따라 0 에서 90 도 에서 0 도 까지 회전 합 니 다.
코드 는 다음 과 같 습 니 다:
ObjectAnimator animator = ObjectAnimator.ofInt(container, "backgroundColor", 0xFFFF0000, 0xFFFF00FF);
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0.0f, 200.0f, 0f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "scaleX", 1.0f, 2.0f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "rotationX", 0.0f, 90.0f, 0.0F);
ObjectAnimator animator4 = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.2f, 1.0F);
// 1
AnimatorSet set = new AnimatorSet();
((set.play(animator).with(animator1).before(animator2)).before(animator3)).after(animator4);
set.setDuration(5000);
set.start();
먼저 5 개의 ObjectAnimator 애니메이션 을 만 든 다음 에 new 는 Animator Set 대상 을 만 들 고 방금 5 개의 애니메이션 을 Animator Set 대상 에 재생 하여 실행 하 는 것 을 볼 수 있 습 니 다.실행 효 과 는 위의 효과 도 입 니 다.물론 Animator Set 클래스 의 play Together (Animator... items) 방법 으로 여러 애니메이션 이 동시에 실행 되 는 효 과 를 실현 할 수 있어 야 합 니 다.
조합 애니메이션 2 – Property Values Holder 사용
위의 Animator 류 를 제외 하고 Property Values Holder 류 를 사용 하여 조합 애니메이션 을 실현 할 수 있 지만 이 조합 애니메이션 은 위의 풍부 함 이 없 기 때문에 Property Values Holder 류 를 사용 하면 여러 개의 애니메이션 만 함께 실행 할 수 있다.물론 우 리 는 ObjectAnimator. of PropertyValues Holder (Object target, PropertyValues Holder... values) 를 결합 해 야 한다.방법 으로 사용 하 다.첫 번 째 매개 변 수 는 애니메이션 의 대상 이 고 그 다음 매개 변 수 는 Property Values Holder 류 의 인 스 턴 스 입 니 다. 여러 개의 인 스 턴 스 를 가 질 수 있 습 니 다.코드 는 다음 과 같 습 니 다:
// 2
PropertyValuesHolder valuesHolder = PropertyValuesHolder.ofFloat("translationX", 0.0f, 300.0f);
PropertyValuesHolder valuesHolder1 = PropertyValuesHolder.ofFloat("scaleX", 1.0f, 1.5f);
PropertyValuesHolder valuesHolder2 = PropertyValuesHolder.ofFloat("rotationX", 0.0f, 90.0f, 0.0F);
PropertyValuesHolder valuesHolder3 = PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.3f, 1.0F);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, valuesHolder, valuesHolder1, valuesHolder2, valuesHolder3);
objectAnimator.setDuration(2000).start();
마찬가지 로 우 리 는 먼저 4 개의 Property Values Holder 류 애니메이션 을 만 든 다음 에 ObjectAnimator. of Property Values Holder () 방법 으로 애니메이션 을 실행 하 는 대상 과 4 개의 애니메이션 을 조합 한 다음 에 돌아 오 는 대상 은 ObjectAnimator 이 고 우 리 는 ObjectAnimator 대상 중의 start () 방법 으로 이 애니메이션 을 시작 할 수 있 습 니 다.Property Values Holder 류 는 ofInt, ofFloat 를 제외 하고 ofObject, ofKeyframe 방법 도 있다.ofKeyframe (String propertyName, Keyframe.. values) 의 첫 번 째 매개 변수 속성 이름, 두 번 째 매개 변수 Keyframe 대상 을 살 펴 보 겠 습 니 다.그러면 키 프레임 상 대 를 보 겠 습 니 다.
Keyframe 사용
이 종 류 는 time / value 키 쌍 을 제어 하여 애니메이션 효 과 를 실현 합 니 다.Keyframe 클래스 에서 실 현 된 ofInt, ofFloat, ofObject 방법.of Float (float fraction, float value) 의 첫 번 째 매개 변 수 는 애니메이션 의 완성 도 를 나타 내 고 값 은 0 - 1 사이 에 변화 합 니 다.두 번 째 매개 변 수 는 현재 프레임 애니메이션 의 값 을 표시 합 니 다.모 르 겠 어 요. 그럼 간단 하고 거 친 걸 로 하 세 요.그림% 1 개의 캡 션 을 편 집 했 습 니 다.
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0.0f, 200.0f, 0f);
우 리 는 Keyframe 을 이용 하여 위의 애니메이션 효 과 를 실현 합 니 다.
Keyframe keyframe1 = Keyframe.ofFloat(0f, 0f);// 0 0
Keyframe keyframe2 = Keyframe.ofFloat(.5f, 200.0f);// 0.5 200
Keyframe keyframe3 = Keyframe.ofFloat(1f, 0f);// 1 0.
PropertyValuesHolder property = PropertyValuesHolder.ofKeyframe("translationX", keyframe1, keyframe2, keyframe3);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, property);
상기 코드 는 세 프레임 애니메이션 값 의 과 도 를 통 해 이동 애니메이션 의 효 과 를 실현 합 니 다.
우 리 는 이러한 의문 이 있 습 니까? 속성 애니메이션 은 대상 의 속성 치 를 바 꾸 어 애니메이션 효 과 를 얻 는 것 입 니 다.그럼 이 대상 의 속성 명 은 무엇 일 까요?정 답 은 set 로 시작 하 는 모든 방법 속성 이름 입 니 다.아마도 우리 가 자주 사용 하 는 것 은:
ViewPropertyAnimator
이 종 류 는 다 속성 애니메이션 입 니 다. 이름 에서 알 수 있 듯 이 이러한 역할 대상 은 view 입 니 다. view 대상 이 여러 속성 애니메이션 을 동시에 실행 해 야 할 때 이 종 류 를 사용 하 는 것 을 고려 할 수 있 습 니 다.예 를 들 어 하나의 ImageView 가 먼저 오른쪽으로 이동 하 는 동시에 두 배의 애니메이션 효 과 를 확대 하여 다음 과 같이 실현 한다.
ViewPropertyAnimator animator5 = imageView.animate();
animator5.translationX(200).scaleX(2).setDuration(2000).start();
메모: View Property Animator 클래스 를 사용 하려 면 API > = 12 가 필요 합 니 다.animate () 방법 을 호출 하여 View Property Animator 대상 을 되 돌려 주 고 속성 방법 으로 애니메이션 의 최종 효과 치 를 설정 하면 다 속성 애니메이션 을 실현 할 수 있 습 니 다!쉽 죠?갑자기 이런 종 류 를 이용 하여 다 중 애니메이션 을 실현 하 는 것 이 Animator Set 보다 훨씬 편리 하 다 고 느 꼈 고 자연 애니메이션 대상 은 View 로 제한 되 었 다.
애니메이션 모니터
많은 경우 에 우 리 는 특정한 애니메이션 이 실행 되 기 전이 나 애니메이션 이 끝 난 후에 다른 조작 을 해 야 할 수도 있다. 예 를 들 어 애니메이션 이 끝 난 후에 네트워크 데이터 요청 등 이다.그러면 우 리 는 이 애니메이션 의 일부 상 태 를 얻어 야 한다. 다행히 안 드 로 이 드 시스템 은 우리 에 게 애니메이션 모니터 인 터 페 이 스 를 제공 하여 서로 다른 상태의 애니메이션 상황 을 감청 해 주 었 다.실현 도 간단 하 다. addListener (Animator Listener listener) 방법 을 사용 하여 애니메이션 에 모니터 를 추가 한 다음 에 Animator Listener 인 터 페 이 스 를 실현 하면 된다.코드 는 다음 과 같 습 니 다:
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//TODO
/**
* UI
*/
}
@Override
public void onAnimationEnd(Animator animation) {
//TODO
/**
* 。
*/
}
@Override
public void onAnimationCancel(Animator animation) {
//TODO
}
@Override
public void onAnimationRepeat(Animator animation) {
//TODO
}
});
서로 다른 수요 에 따라 인터페이스 안의 네 가지 방법 을 실현 할 수 있다.가끔 은 제 가 애니메이션 의 네 가지 상 태 를 감청 할 필요 가 없다 고 생각 할 때 가 있 습 니 다. 저 는 애니메이션 이 끝 날 때의 상태 만 감청 해 야 합 니 다. 위의 방법 을 사용 하면 코드 가 비대 해 지 는 것 을 느 낄 수 있 지만 괜 찮 습 니 다. Android 시스템 은 우리 에 게 더 좋 은 방법 을 제공 해 주 었 습 니 다.
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
//TODO
/**
* 。
*/
}
});
이 를 통 해 알 수 있 듯 이 우 리 는 Animator Listener Adapter 애니메이션 인터페이스 어댑터 를 Animator Listener 인터페이스 대신 사용 했다.사실 Animator Listener Adapter 의 소스 코드 는 Animator Listener 인 터 페 이 스 를 실현 하 는 추상 적 인 유형 일 뿐 입 니 다. 어떤 애니메이션 상 태 를 감청 해 야 하 는 지 다시 쓰 면 됩 니 다.이 방법 이 좋 지 않 나 요 ~?이것 만 만족 하면 OUT 입 니 다. 안 드 로 이 드 시스템 은 우리 에 게 현재 애니메이션 의 실행 상황 을 항상 감청 할 수 있 는 더욱 정확 한 방법 을 제공 해 주 었 습 니 다.바로 addUpdateListener (Animator UpdateListener listener) 방법 입 니 다.이 방법 을 사용 하면 애니메이션 의 모든 업데이트 값 을 읽 을 수 있 습 니 다.코드 를 보 겠 습 니 다.
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
// 。
Log.e("TAG", "the animation value is " + value);
}
});
이 방법 은 구체 적 으로 어떤 곳 에 사용 되 었 는 지 이전 안 드 로 이 드 속성 애니메이션 Property Animation 시리즈 의 ValueAnimator 의 동적 인 사선 애니메이션 을 참조 하여 실현 할 수 있 습 니 다.
XML 로 애니메이션 만 들 기
코드 가 상기 모든 애니메이션 을 실현 하 는 것 을 제외 하고 보충 애니메이션 과 마찬가지 로 Android 시스템 도 xml 를 제공 하여 속성 애니메이션 을 실현 합 니 다.코드 에 비해 애니메이션 을 실현 하 는 것 이 번 거 로 울 수 있 지만 xml 애니메이션 은 중복 성 이 좋 습 니 다. xml 애니메이션 을 만 들 면 여러 번 사용 할 수 있 습 니 다.그럼 xml 애니메이션 을 보 세 요.추가 애니메이션 과 달리 res 디 렉 터 리 에 animator 디 렉 터 리 를 새로 만 들 고 추가 애니메이션 은 새 anim 디 렉 터 리 입 니 다.xml 에서 애니메이션 을 구현 하려 면 다음 세 개의 탭 을 사용 합 니 다.
<animator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueFrom="0"
android:valueTo="10"
android:duration="2000"
android:valueType="intType">animator>
예 를 들 어 0 회전 에서 90 도로 넘 어 가 는 애니메이션 xml 코드 는 다음 과 같다.
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:propertyName="rotationX"
android:valueFrom="0"
android:valueTo="90"
android:valueType="floatType" />
우리 애니메이션 을 조합 합 시다.
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:ordering="sequentially">
<objectAnimator
android:propertyName="translationX"
android:valueFrom="0"
android:valueTo="200"
android:valueType="floatType" />
<set android:ordering="together">
<objectAnimator
android:propertyName="scaleX"
android:valueFrom="1"
android:valueTo="2"
android:valueType="floatType" />
<objectAnimator
android:propertyName="rotationX"
android:valueFrom="0"
android:valueTo="90"
android:valueType="floatType" />
set>
set>
xml 애니메이션 을 다 썼 습 니 다. 코드 에서 어떻게 호출 하 는 지 보 겠 습 니 다.
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);
animator.setTarget(view);
animator.start();
Animator Inflater. loadAnimator 방법 으로 xml 애니메이션 을 불 러 와 Animator 의 대상 을 되 돌려 주 고 setTarget 방법 으로 애니메이션 설정 대상 에 게 어떤 start 로 애니메이션 을 시작 하면 xml 애니메이션 효 과 를 완성 할 수 있 습 니 다.쉽 지 않 을까요?마지막 으로 xml 애니메이션 의 가 독성 이 높 은 것 을 발 견 했 습 니 다. 좋아요 ~
다음 절 에 우 리 는 LayoutTransition: 레이아웃 애니메이션 을 계속 공부 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 작성 조수 -- by lustslost기능: 1. 같은 이름 의 파일 이 존재 하 는 지 자동 으로 감지 하고, 존재 하 는 경우 사용자 의 존 재 를 알 리 며, 편집, 삭제 후 생 성, 종료 3 가지 옵션 을 제공 합 니 다. 2. 스 크 립 트 저...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.