android 구성 요소 애니메이션 이동 후 원래 위치 변하지 않는 해결 방법

2908 단어 android 기초 지식
프로젝트를 할 때 일부 구성 요소에 이동 애니메이션을 추가한 것을 발견했고 애니메이션이 끝난 후에 애니메이션 뒤의 위치에서 멈춘 다음에 구성 요소를 눌렀을 때 눌렀지만 눌렀을 때 원래의 위치는 눌렀을 수 있다.
인터넷에서 찾아보니 해결 방법은 모두 애니메이션이 끝난 후에 LayoutParams를 다시 설정하는 것이다. 여기서 반드시 주의해야 한다. 설정이 끝난 후에 애니메이션을 반드시clearAnimation()를 제거해야 한다. 그렇지 않으면 두 설정이 겹쳐진다.

AnimatorSet animationSet = new AnimatorSet();

ObjectAnimator animator = ObjectAnimator.ofFloat(mainLayout, "translationY", 0, 25);
animationSet.playTogether(animator);

animationSet.setDuration(300);
animationSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mainLayout.getLayoutParams();
params.topMargin = params.topMargin + 25;
mainLayout.setLayoutParams(params);
mainLayout.clearAnimation();
}

@Override
public void onAnimationCancel(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}
});
animationSet.start();

테스트 결과 2.3.3 버전과 이 버전 이하의 버전이 이동한 후에 수동으로 위치를 이동해야 하는 문제가 하나 더 발견되었다. 그러나 4.x 이상의 시스템은 더 이상 수동으로 이동할 필요가 없기 때문에 다음과 같이 판단을 추가합니다.

AnimatorSet animationSet = new AnimatorSet();

ObjectAnimator animator = ObjectAnimator.ofFloat(mainLayout, "translationY", 0, 25);
animationSet.playTogether(animator);

animationSet.setDuration(300);
if(Build.VERSION.SDK_INT<14) { // android4
animationSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mainLayout.getLayoutParams();
params.topMargin = params.topMargin + 25;
mainLayout.setLayoutParams(params);
mainLayout.clearAnimation();
}

@Override
public void onAnimationCancel(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}
});
}
animationSet.start();

좋은 웹페이지 즐겨찾기