App노자

[Android] ObjectAnimator 본문

Android/AndroidStudio

[Android] ObjectAnimator

앱의노예 2023. 6. 10. 23:16

1. ObjectAnimator란?


ObjectAnimator 애니메이션으로 보여줄 타겟 객체 및 객체 속성을 설정하는 데 사용할 수 있는 ValueAnimator의 서브클래스이다

이 클래스에서는 애니메이션의 새 값을 계산할 때 적절하게 속성을 업데이트한다

ObjectAnimator를 사용하면 타겟 객체에서 값을 애니메이션하는 프로세스가 훨씬 쉬워지지만 타겟 객체에 특정 접근자 메서드가 있어야 하는 등의 몇 가지 추가 제한사항이 있다

 

 

https://developer.android.com/guide/topics/graphics/prop-animation?hl=ko#object-animator 

 

속성 애니메이션 개요  |  Android 개발자  |  Android Developers

속성 애니메이션 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 속성 애니메이션 시스템은 거의 모든 항목을 애니메이션으로 만들 수 있는 강력한 프

developer.android.com

2.  사용방법


 

 

 

 

 

 

 

 

 

 

 

3.  전체코드


Java
public class MainActivity extends AppCompatActivity {

    AnimatorSet animatorSet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initPhoto();
    }

    private void initPhoto() {

        ImageView dogView1 = (ImageView) findViewById(R.id.img_dog_tutorial_01);
        ImageView dogView2 = (ImageView) findViewById(R.id.img_dog_tutorial_02);
        ImageView dogView3 = (ImageView) findViewById(R.id.img_dog_tutorial_03);


        PropertyValuesHolder scaleX_in = PropertyValuesHolder.ofFloat(View.SCALE_X, 1.0f, 1.05f);
        PropertyValuesHolder scaleY_in = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.0f, 1.05f);

        ObjectAnimator dogViewScaleIn = ObjectAnimator.ofPropertyValuesHolder(dogView1, scaleX_in, scaleY_in);
        dogViewScaleIn.setDuration(4500);
        ObjectAnimator dogView1Alpha1 = ObjectAnimator.ofFloat(dogView1, View.ALPHA, 0f, 1f);
        ObjectAnimator dogViewAlpha0 = ObjectAnimator.ofFloat(dogView1, View.ALPHA, 1f, 0f);

        dogViewAlpha0.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                dogView1.setScaleX(1f);
                dogView1.setScaleY(1f);
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        dogViewAlpha0.setDuration(500);

        ObjectAnimator loginView2ScaleIn = ObjectAnimator.ofPropertyValuesHolder(dogView2, scaleX_in, scaleY_in);
        loginView2ScaleIn.setDuration(4500);
        ObjectAnimator loginView2Alpha0 = ObjectAnimator.ofFloat(dogView2, View.ALPHA, 1f, 0f);
        loginView2Alpha0.setDuration(500);
        ObjectAnimator loginView2Alpha1 = ObjectAnimator.ofFloat(dogView2, View.ALPHA, 0f, 1f);

        ObjectAnimator loginView3ScaleIn = ObjectAnimator.ofPropertyValuesHolder(dogView3, scaleX_in, scaleY_in);
        loginView3ScaleIn.setDuration(4500);
        ObjectAnimator loginView3Alpha0 = ObjectAnimator.ofFloat(dogView3, View.ALPHA, 1f, 0f);
        loginView3Alpha0.setDuration(500);
        ObjectAnimator loginView3Alpha1 = ObjectAnimator.ofFloat(dogView3, View.ALPHA, 0f, 1f);

        animatorSet = new AnimatorSet();
        animatorSet.play(dogViewScaleIn).before(dogViewAlpha0);
        animatorSet.play(dogViewAlpha0).with(loginView2Alpha1).with(loginView2ScaleIn);
        animatorSet.play(loginView2Alpha0).after(loginView2ScaleIn).with(loginView3Alpha1).with(loginView3ScaleIn);
        animatorSet.play(loginView3Alpha0).after(loginView3ScaleIn).with(dogView1Alpha1);

        animatorSet.addListener(new Animator.AnimatorListener() {
            boolean isCanceled = false;
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                if(isCanceled) {
                    isCanceled = false;
                } else {
                    animatorSet.start();
                }
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                isCanceled = true;
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });

        animatorSet.start();
    }
}
XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/img_dog_tutorial_01"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitCenter"
        android:src="@drawable/kakaotalk_photo_1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/img_dog_tutorial_02"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitCenter"
        android:src="@drawable/kakaotalk_photo_2"
        android:alpha="0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/img_dog_tutorial_03"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitCenter"
        android:src="@drawable/kakaotalk_photo_3"
        android:alpha="0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

'Android > AndroidStudio' 카테고리의 다른 글

[Android] Event listener  (0) 2023.06.23
[Android] finish, finishAffinity  (0) 2023.06.16
[Android] Property Animation Overview  (0) 2023.06.05
[Android] ImageView - scaleType  (0) 2023.06.04
[Android] onNewIntent()  (0) 2023.06.01