티스토리 뷰
Mobile/Android
[Android]Scroller 구현시 computeScroll()와 scrollTo()의 관계
out of coding 2014. 9. 25. 16:13Scroller 구현시 computeScroll()와 scrollTo()의 관계
Scroller를 생성하고, 호출을 이런방식으로 하게 된다.
mScroller.startScroll(0, 0, 0, 300, 2000); // 0,0에서 0,300으로 2초동안 Scroll한다.
이후 View의 computeScroll을 Override하여서 사용을 하여야 하는데, 스크롤이 될때 까지의 내용은 다음과 같다.
@Override public void computeScroll() { super.computeScroll(); android.util.Log.v("DongHyuk", "getCurrX() = " + mScroller.getCurrX()); android.util.Log.v("DongHyuk", "getCurrY() = " + mScroller.getCurrY()); if(mScroller.computeScrollOffset()) { if(mScroller.isFinished()) { android.util.Log.v("DongHyuk", "mScroller is finished"); requestLayout(); } else { android.util.Log.v("DongHyuk", "CurrY = " + mScroller.getCurrY()); scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); } invalidate(); } }
Scroller는 scrollTo() 를 통해서 특정지점까지 움직이고 난후에, 도착하게 되면 draw()가 호출되고, 이곳에서 computeScroll()이 호출된다.
그렇기 때문에 위의 코드에서 computeScroll() 에서 scrollTo() 를 호출하면, scrollTo() 가 끝나는 시점에 computeScroll() 이 한 번 더 호출된다.
그래서 이 때 다시 scrollTo() 를 호출해서 좀 더 그리고 다시 computeScroll() 로 돌아오고,
이런 식으로 scroll 이 목적지에 다다를 때까지 지속적으로 호출된다고 보면 된다.
만약 Scroller가 finish되게 되면 화면에 request하여주고 끝나는 것이다.
'Mobile > Android' 카테고리의 다른 글
[Android]Animation class applyTransformation (0) | 2014.09.25 |
---|---|
[Android]NetworkOnMainThreadException (0) | 2014.09.25 |
[Android]Scroller의 getCurrX와 getCurrY의 결정되는 방식 (0) | 2014.09.25 |
[Android]UI 그리는 순서 (0) | 2014.09.25 |
[Android]requestLayout, invalidate의 차이 (0) | 2014.09.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Windows
- git
- Java
- Kotlin
- php
- SWIFT
- intellij
- android
- github
- golang
- centos8
- Gradle
- Python
- docker
- Spring
- Xcode
- nodejs
- windows10
- go
- war
- ios
- tomcat
- rxswift
- CentOS
- enum
- Linux
- MySQL
- Codable
- cocoapods
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함