viewpager와 animation

조회수 1223회

안녕하세요.

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

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

  • 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

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

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.