2013-04-19 5 views
0

나는 약 100,000 이상의 항목이있는 CListCtrl입니다. 사용자는 검색 상자를 통해 이러한 항목을 검색 할 수 있습니다. 일치 항목을 찾으면 해당 항목을 선택 항목으로 설정하고 EnsureVisible을 사용하여 스크롤합니다.부드러운 스크롤 애니메이션을 만들려면 어떻게해야합니까?

이 스크롤은 즉시 발생합니다. ones demoed here (특히 'Go Top - Easing 2'애니메이션)과 비슷한 애니메이션을 시도하고 코딩하려고했습니다. 나는 기본적인 애니메이션, 생각하고

,

  1. 가 현재 선택하세요.
  2. 타켓을 선택하십시오.
  3. 차이 계산.
  4. 한 항목의 픽셀 높이를 가져옵니다. 난이 난 시도 제

단계 증가 = 결과까지 지연을 1 증분 (또는 다른 더 최적 값)에 의해 단계 3 및 4

  • Scroll
  • Mutiply 결과 엄청 혼란스러워. 첫째, 내 알고리즘은 괜찮습니까? 둘째로,이를 달성하기위한 또 다른, 더 좋은 방법이 있습니까 (바람직하게는 link above의 애니메이션 2와 유사)?

  • 답변

    1

    간단한 선형 스크롤로 알고리즘이 괜찮은 것 같습니다. 그러나 링크는 다양한 여유 함수를 사용하여 스크롤을 가리 킵니다.

    완화 기능은 매번 동일한 양으로 스크롤하지 않지만 증가 또는 감소는 속도가 올라가거나 느려지는 것처럼 보이게합니다.

    여유 값을 계산하는 일반적인 방법은 사인 결과를 사용하는 것입니다. 사인파를 촬영하고 한 번에 하나의 픽셀 만 볼 수 있다고 상상하면, 파동이 진행됨에 따라 픽셀은 극한 상태에서 "편 해지고"중간 값을 통해 가속화됩니다.

    이싱 2 애니메이션은 시작과 끝 부분에 약간의 바운스를 추가하는 것입니다. 이것은 각 끝의 극단을 지나치는 약간의 사인파를 사용하면 쉽게 달성 할 수 있습니다. 예.

     _ 
        /\ 
    /
    \_/ 
    

    일부 코드가 필요하면 C#의 here과 비슷한 질문에 답했습니다.

    +0

    사실 내 알고리즘은 전혀 작동하지 않았습니다. 하지만 그렇습니다. 나는 이것이 내가 원했던 것에 더 가까이 다가 갈 수 있다고 생각한다. 나는 이것을 시도하고 돌아올 것이다. 답변 주셔서 감사합니다! –