App노자
[Android] ObjectAnimator 본문
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 |