viewpager와 animation
조회수 1643회
안녕하세요.
뷰페이저를 사용하여 여러개의 화면이 있고 툴바는 하나를 공용으로 사용하고 있습니다. 여기서 화면을 이동시키면 화면에 맞게 툴바 버튼을 아래와같이 scale애니메이션을 주고 있습니다.
ObjectAnimator animRightX = ObjectAnimator.ofFloat(view, "scaleX", 0);
화면을 이동시키면 사라지게 할때는 애니메이션이 잘듣는데 월래의 화면으로 돌리면 scaleX가 0이되어있으야 하는데 다시 1이 되어있어 사라졌다 다시생기는 2중애니메이션이 실행됩니다.
화면1 버튼이 표시
↓
화면2 버튼이 scale애니메이션으로 사라짐 (로그scale 0)
↓
화면1 버튼의scale가 1이되어있음..... 다시 표시하는 애니메이션이 시작하기전 (로그scale 1)
화면2에 아무것도 없으면 scale 가 0 으로유지됩니다... 화면2에 리스트라든지 뷰를 표시하고 있으면 scale 0이 유지가 안됩니다.
바쁘신데 죄송합니다만 힌트라도 될만한게 있으시면 기쁘게 참고 하겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
엑티비티 = Toolbar ↓ 페이지뷰 ↓ 플래그먼트1 플래그먼트2 플래그먼트3
여기서 페이지뷰 를 이동을하면 엑티비티에서 Viewpager selectPage 누른시점에서 Toolbar클래스에서
final ObjectAnimator animRightX = ObjectAnimator.ofFloat(view, "scaleX", isShow ? 1f : 0f); final ObjectAnimator animRightY = ObjectAnimator.ofFloat(view, "scaleY", isShow ? 1f : 0f); final AnimatorSet animSetRightXY = new AnimatorSet(); animSetRightXY.playTogether(animRightX, animRightY); animSetRightXY.start();
이렇게 하고 있습니다
리스너는animSetRightXY.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { if ((isShow && view.getScaleX() == 0)) { view.setVisibility(View.VISIBLE); } } @Override public void onAnimationEnd(Animator animation) { if ((isShow && view.getScaleX() == 1.0)) { view.setVisibility(View.VISIBLE); } else if ((!isShow && view.getScaleX() == 0)) { view.setVisibility(View.INVISIBLE); } view.clearAnimation(); view.animate().setListener(null); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } });
-
(•́ ✖ •̀)
알 수 없는 사용자
- ViewPager에서 세개의 페이지를 사용하고 있는데요. 기본 설정으로 사용 중이라면 세번째 페이지로 이동을 했을 때, 첫번째 페이지가 소멸됩니다. 마찬가지로 다시 첫번째 페이지로 이동했을 때 세번째 페이지가 소멸되고요. 혹시 이런 동작으로 인해서 프래그먼트가 소멸되고 재생성되는 과정 중 코드 내의 (어떠한) 상태 값이 초기화 되어 발생하는 현상이 아닐까 싶습니다. (올려주신 코드만으로는 문제를 찾기가 어렵네요) 알 수 없는 사용자 2016.9.3 13:08
-
댓글 입력