2013-06-27 2 views
0

현재 프로젝트의 경우 핸들과 내용이있는 풀다운 뷰를 작성하고 있습니다. 핸들을 드래그하여 핸들을 움직이면 모든 것이 정상입니다. 그런 다음 풀다운을 완전히 열거 나 닫을 애니메이션을 시작합니다.안드로이드 뷰 애니메이션의 위치가 느슨합니다.

첫째 : 거기에 애니메이션이 다 ... 잘하지만, 오프 과정이 원활하지 않고

그래서 나는 애니메이션이 추가되었습니다 :

ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "y", newHandlePosition); 
    ObjectAnimator animContent = ObjectAnimator.ofFloat(mContent, "y", newContentPosition); 
    final AnimatorSet animatorSet = new AnimatorSet(); 
    animatorSet.playTogether(animHandle, animContent); 
    animatorSet.setInterpolator(new AccelerateDecelerateInterpolator()); 
    animatorSet.setDuration(MAX_ANIMATION_DURATION); 
    animatorSet.start(); 

모든 것이 잘 utill입니다 이리. 내가 다시 핸들 (mHandleContainer)를 누르면 핸들이 배치된다

는하지만, 그래서 나는

mHandleContainer.getTop() 

을 알고 싶어 그리고 그것은 모든 잘못 곳입니다. 사용자 정의 구성 요소를 초기화 할 때 핸들의 윗부분을 0으로 설정합니다. 지금까지는 너무 좋아서 드래그하기 시작했습니다. 1134 픽셀 위치로 움직일 것을 알았습니다. 어느 것이 좋습니다 (풀다운이 완전히 열려 있음을 의미).

는하지만 내가 핸들을 다시 눌러 정상을 얻을 수 (getTop())과 아직 내가 원하는 것은 내보기의 getTop() 함수는 나를 다시 1134을 반환 나를 0

에게 반환합니다.

그럴 수 있습니까?

또는 AnimatorListener의 onAnimationEnd 메소드에서 뭔가를해야합니까? 이미 거기에 mHandleContainer.layout (..)을 시도한 다음 내 getTop()은 괜찮습니다.하지만 내 레이아웃이 엉망이되었습니다 ...

정확한 위치에서 애니메이션을 끝내기위한 트릭입니다. (그렇듯이)보기의 위치를 ​​유지합니까?

나는 이미 SO (및 Google)에서 한 번 보았지만 유용한 것을 찾지 못했습니다. 내가 발견 할 수있는 유일한 문제는 다음과 같습니다. NineOldAndroids, not clickable view after rotation or move 하지만 도움이되지 않았습니다 ...

답변

0

이것은 속성 상단을 읽으려고 시도하는 동안 "y"속성에 애니메이션 효과가 있기 때문입니다. 동일하지 않습니다. 위쪽은 부모를 기준으로 한보기의 맨 위 위치입니다. Y는 translationY + 현재 최상위 속성과 동일한 뷰의 시각적 y 위치입니다.따라서 귀하의 경우

:

ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "top", 200); 

그리고

mHandleContainer.getTop() 
  • 또는 "Y"를 통해 읽어 :

    1. 중 하나가 "정상"이 같은 애니메이션을

      ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "y", 200); 
      

      내가 때마다 내 모든 뷰를 이동 내 사용자 지정 그리기 방법이라는 기본 ValueAnimator를 사용하여 문제를 해결 않았다

      mHandleContainer.getY(); 
      
  • 관련 문제