티스토리 뷰

Scroller 구현시 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하여주고 끝나는 것이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
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
글 보관함