viewpager와 animation


안녕하세요.

뷰페이저를 사용하여 여러개의 화면이 있고 툴바는 하나를 공용으로 사용하고 있습니다. 여기서 화면을 이동시키면 화면에 맞게 툴바 버튼을 아래와같이 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이 유지가 안됩니다.

바쁘신데 죄송합니다만 힌트라도 될만한게 있으시면 기쁘게 참고 하겠습니다.

  • 2016년 08월 29일에 작성됨
    Android개발을 하고 있습니다만 모르는것이 많습니다. ^^;;

  • Scale 애니메이션을 적용한 뷰가 공용으로 사용하고 있는 툴바인가요? 아니면 툴바 버튼(?)이라는 뷰인가요?     한로니로니   2016.8.29 16:59     
  • 공용으로 사용하고 있는 툴바입니다. 툴바안에 버튼입니다!!    초보초보초밥입니다.   2016.8.29 17:01     
  • 관련해서 작성하신 코드가 있어야 문제를 확인해볼 수 있을 것 같습니다.    한로니로니   2016.8.31 13:19     
  • 아래에 코드를 넣어봤습니다. API11부터 뷰의 값자체를 바꾸는걸로 알고 있는데 scale를0으로설정해도 1로돌아오는 이유를 모르겠습니다.    초보초보초밥입니다.   2016.8.31 13:41     
조회수 165


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) {

                }
            });
  • 2016년 08월 31일에 작성됨
    Android개발을 하고 있습니다만 모르는것이 많습니다. ^^;;

  • ViewPager에서 세개의 페이지를 사용하고 있는데요. 기본 설정으로 사용 중이라면 세번째 페이지로 이동을 했을 때, 첫번째 페이지가 소멸됩니다. 마찬가지로 다시 첫번째 페이지로 이동했을 때 세번째 페이지가 소멸되고요. 혹시 이런 동작으로 인해서 프래그먼트가 소멸되고 재생성되는 과정 중 코드 내의 (어떠한) 상태 값이 초기화 되어 발생하는 현상이 아닐까 싶습니다. (올려주신 코드만으로는 문제를 찾기가 어렵네요)    한로니로니   2016.9.3 13:08     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close