Android 속성 애니메이션 Property Animation 시리즈 2 의 ObjectAnimator

22117 단어 andorid개발 하 다.
전재 출처 를 밝 혀 주 십시오http://blog.csdn.net/feiduclear_up/article/details/45915377
앞의 블 로 그 는 안 드 로 이 드 속성 애니메이션 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);//    

너무 쉬 운 것 같 지 않 아 요?두 줄 의 코드 는 하나의 애니메이션 효 과 를 실현 할 수 있 습 니 다. 물론 간단 한 애니메이션 설정 일 뿐 입 니 다. 만약 에 더 좋 은 효과 애니메이션 이 필요 하 다 면 이런 방법 으로 설정 할 수 있 습 니 다.
  • setInterpolator (): 애니메이션 플러그 인 설정
  • setDuration (): 애니메이션 실행 시간 설정
  • setRepeatCount (): 애니메이션 중복 횟수 설정
  • setRepeatMode (): 애니메이션 중복 모드 설정
  • setStartDelay (): 애니메이션 지연 동작 설정
  • setTarget (): 애니메이션 대상 설정
  • setEvaluator (): 애니메이션 의 과도 한 평가 자 를 설정 합 니 다.

  • 자세 한 애니메이션 설정 은 다음 과 같 습 니 다.
     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 로 시작 하 는 모든 방법 속성 이름 입 니 다.아마도 우리 가 자주 사용 하 는 것 은:
  • translation X, translation Y, X, Y.
  • scaleX, scaleY 크기 조정.
  • 회전 rotationX, rotationY.
  • 투명도 알파.즉, 우리 의 모든 컨트롤 에는 이상 의 setTranslationX (), setScaleX (), setRotationX (), setAlpha () 등 방법 이 있다.저 희 는 이 몇 가지 속성 에 만 국한 되 지 않 고 TextView 컨트롤 에 있어 TextView 의 속성 이 있 으 면 애니메이션 효 과 를 실현 할 수 있 습 니 다. 예 를 들 어 글꼴 크기: "textColor", 글꼴 색상 "textSize" 등 입 니 다.

  • 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 에서 애니메이션 을 구현 하려 면 다음 세 개의 탭 을 사용 합 니 다.
  • 대응 코드 중의 ValueAnimator
  • 대응 코드 중의 ObjectAnimator
  • 코드 에 있 는 Animator
  • 예 를 들 어 0 – 10 의 값 을 실현 하 는 부 드 러 운 과도 애니메이션 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: 레이아웃 애니메이션 을 계속 공부 합 니 다.

    좋은 웹페이지 즐겨찾기