멋 진 속성 애니메이션 감상 분석 (Property Animation)

권리 성명: 전재 출처 를 밝 혀 주 십시오.http://blog.csdn.net/hello_chillax/article/details/44992787
오늘 우 리 는 안 드 로 이 드 에서 비교적 재 미 있 는 애니메이션 효 과 를 배 울 것 이다.
첫째, 애니메이션 의 분류: View Animation, Drawable Animation, Property Animation.
각자 실현 할 수 있 는 효과: View Animation 은 비교적 간단 하고 View 의 기본 애니메이션 효과 만 실현 할 수 있 습 니 다. 예 를 들 어 translation (이동), alpha (페이드아웃), rotate (회전), scale (크기 조정) 등 입 니 다.다른 효 과 를 내 고 싶다 면 Property Animation 을 사용 하 는 것 도 고려 해 야 한다.
2. Property Animation 의 간단 한 사용.
1.ObjectAnimator.
. ofInt, ofFloat, ofObject 를 제 공 했 는데 이 몇 가지 방법 은 모두 애니메이션 작용 의 요소, 작용 의 속성, 애니메이션 의 시작, 끝, 그리고 중간의 임의의 속성 값 을 설정 하 는 것 이다.다음은 데모 하 나 를 통 해 ObjectAnimator 에 대해 자세히 말씀 드 리 겠 습 니 다.우선 우 리 는 main. xml 에 Button 을 쓰 는 프로젝트 를 새로 만 들 었 습 니 다.main 함수 에 다음 코드 를 쓰 십시오.
우 리 는 이러한 애니메이션 을 실현 합 니 다. Button 을 클릭 하여 Button 을 오른쪽 아래 로 이동 시 킵 니 다. 그래서 우 리 는 네 가지 실현 방법 이 있 습 니 다.
//     :animation          ,           
        TranslateAnimation animationX=new TranslateAnimation(0, 500, 0, 0);
        TranslateAnimation animationY=new TranslateAnimation(0,0,0,500);
        AnimationSet set=new AnimationSet(false);
        set.addAnimation(animationX);
        set.addAnimation(animationY);
        set.setDuration(3000);
        set.setFillAfter(true);
        button.startAnimation(set);
//     :                    !!!
        ObjectAnimator.ofFloat(button, "translationX", 0F,500F).setDuration(3000).start();
        ObjectAnimator.ofFloat(button, "translationY", 0F,500F).setDuration(3000).start();
//       :  PropertyValuesHolder    (         )
        PropertyValuesHolder holder1=PropertyValuesHolder.ofFloat("translationX", 0,500);
        PropertyValuesHolder holder2=PropertyValuesHolder.ofFloat("translationY", 0,500);
        ObjectAnimator.ofPropertyValuesHolder(button, holder1,holder2).setDuration(3000).start();
//       : AnimatorSet      ,         
        ObjectAnimator animator1=ObjectAnimator.ofFloat(button, "translationX", 0F,500F);
        ObjectAnimator animator2=ObjectAnimator.ofFloat(button, "translationY", 0F,500F);
        AnimatorSet set=new AnimatorSet();
        set.playTogether(animator1,animator2);//    
//      set.playSequentially(animator1,animator2);//    
//      set.play(animator1).with(animator2);//    
//      set.play(animator2).after(animator1);// animator2 animator1    
        set.setDuration(3000);
        set.start();

어 떻 습 니까? 우 리 는 애니메이션 을 실 현 했 을 뿐만 아니 라 간단 한 코드 로 네 가지 방식 을 실 현 했 습 니 다.
다음은 애니메이션 이벤트 에 대한 감청 을 살 펴 보 겠 습 니 다. 우 리 는 Button 이동 이 끝 난 후에 Toast 를 호출 하여 "animator over" 라 는 글 자 를 보 여 줍 니 다. 우 리 는 방법 4 를 선택 하여 감청 효 과 를 추가 합 니 다. 다른 유사 한 것 은 다음 과 같은 코드 를 추가 합 니 다.
set.addListener(new AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Toast.makeText(MainActivity.this, "animator over", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }
        });

물론 이 모니터 코드 가 너무 많다 고 생각 하고 그렇게 많은 방법 을 실현 하고 싶 지 않다 면 다음 과 같은 방법 을 사용 하 셔 도 됩 니 다.
set.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
            Toast.makeText(MainActivity.this, "animator over", Toast.LENGTH_SHORT).show();
            }
        });

너무 깔끔 한 거 아니 야?
2. ValueAnimator 다음은 또 다른 중요 한 animator 로 들 어 갑 니 다.우선, 오 브 젝 트 애 니 메 이 터 와 의 관 계 를 살 펴 보 자.
public final class ObjectAnimator extends ValueAnimator {
    private static final boolean DBG = false;

    // The target object on which the property exists, set in the constructor
   。。。。。。。

분명히 ObjectAnimator 는 ValueAnimator, 즉 ObjectAnimator 가 ValueAnimator 를 포장 한 것 이다.
주의: ValueAnimator 자 체 는 어떠한 애니메이션 도 실현 할 수 없습니다. 이것 은 애니메이션 변화 가 발생 하 는 변화 값 입 니 다. 다음은 button 의 text 를 0 에서 애니메이션 의 진도 에 따라 100 으로 증가 시 키 는 기능 을 실현 합 니 다. 다음 코드 를 추가 합 니 다.
ValueAnimator animator=ValueAnimator.ofInt(0,100);
        animator.setDuration(3000);
        animator.addUpdateListener(new AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Integer integer=(Integer) animation.getAnimatedValue();
                button.setText(""+integer);
            }
        });
        animator.start();

오케이, 이렇게 됐어.
3. Layout Animation 과도 유형 은 모두 네 가지 가 있 습 니 다.
LayoutTransition. APPERING 뷰 그룹 에 뷰 가 나타 날 때 이 뷰 에 설 치 된 애니메이션
LayoutTransition.CHANGE_APPEARING 은 View 가 View Group 에 나타 날 때 View 는 다른 View 위치 에 영향 을 주 고 다른 View 가 설정 한 애니메이션 에 영향 을 줍 니 다.
LayoutTransition. DISAPEARING View 가 ViewGroup 에서 사 라 졌 을 때 이 View 에 설 치 된 애니메이션
LayoutTransition.CHANGE_DISAPPEARING 하나의 View 가 View Group 에서 사 라 졌 을 때 이 View 는 다른 View 위치 에 영향 을 주 고 다른 View 가 설정 한 애니메이션 에 영향 을 줍 니 다.
Layout Transition. CHANGE 는 View 가 나타 나 거나 사라 져 서 다른 View 위치 에 영향 을 미 친 다음 에 다른 View 에 설 치 된 애니메이션 이 아 닙 니 다.
애니메이션 이 누구 에 게 설정 되 어 있 는 지 주의 하 십시오. 이 View 는 다른 View 입 니 다.
마지막 으로 데모 다운로드 주소:http://download.csdn.net/detail/nsgsbs/8525995

좋은 웹페이지 즐겨찾기