티스토리 뷰
현재 스크롤되는 위치를 계산해서 돌려주는 방식이 좀 궁금하였다.
Scroller.startScroll와 Scroller.computeScrollOffset()에 내용이 존재한다.
Scroller.startScroll(int startX, int startY, int dx, int dy, int duration){ ... mDuration = duration; ... mDurationReciprocal = 1.0f / (float) mDuration; ... } Scroller.computeScrollOffset() { ... if (timePassed < mDuration) { switch (mMode) { case SCROLL_MODE: float x = timePassed * mDurationReciprocal; if (mInterpolator == null) x = viscousFluid(x); else x = mInterpolator.getInterpolation(x); mCurrX = mStartX + Math.round(x * mDeltaX); mCurrY = mStartY + Math.round(x * mDeltaY); break; ... }
모든 시간의 기준은 1/1000이 된다.
startScroll을 통하여 scroll이 시작되게 되는데, 처음에 duration을 받게되면, 그것을 Reciprocal을 구하도록 한다.
이 값을 가지고, 전체 시간에서 얼마정도 진행이 되었는지를 확인할수 있다.
아주 쉬운 개념은 duration을 1000으로 주게 된다면, 1/1000이므로, 진행되는 단위가 이렇게 되는것이다.
이 수치를 계산하는 이유가 Interpolator의 getInterpolation을 구하는 부분에서 진행된 비율이 들어가야 하기 때문이다. (0.0~1.0 사이의 값)
getInterpolation이 하는 일은 자신의 interpolation에 대해서, animation의 좌표를 계산하여 주는 역할을 한다.
위의 소스처럼 x 값을 넣어주게 되면, x값을 가져오게 되는, 진행된 비율에 따른 animation의 값을 정하여 주는것이다.
EX) 끝에서 빠르게, 끝에서 느리게 등등...
return되어서 나오는 x의 값도 %값이라 생각하면 되는데, 이 값에 총 거리를 곱하면 진행되는 거리가 나오게 되고,
다시 이 값을 시작하는 Position에 더하여 주어서 CurrX와 CurrY값이 결정되는 것이다.
'Mobile > Android' 카테고리의 다른 글
[Android]NetworkOnMainThreadException (0) | 2014.09.25 |
---|---|
[Android]Scroller 구현시 computeScroll()와 scrollTo()의 관계 (0) | 2014.09.25 |
[Android]UI 그리는 순서 (0) | 2014.09.25 |
[Android]requestLayout, invalidate의 차이 (0) | 2014.09.25 |
[Android]ScrollView와 ListView의 padding (0) | 2014.09.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Linux
- Java
- enum
- CentOS
- php
- Windows
- Xcode
- MySQL
- go
- Python
- Spring
- android
- Kotlin
- centos8
- golang
- nodejs
- SWIFT
- war
- cocoapods
- ubuntu
- tomcat
- ios
- git
- windows10
- docker
- github
- intellij
- rxswift
- Gradle
- Codable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함