티스토리 뷰
안녕하세요 박스여우입니다.
이번에는 ScrollView의 스크롤이 바닥에 닿았을때, 스크롤 뷰의 내용이 모두 보여졌을때 새로운 게시글을 로드하기 위한 이벤트를 발생시키는 방법에 대해 소개해 드리고자 합니다.
■ ScrollView 바닥에 닿았을 때 이벤트
여러가지 방법이 있지만 저는 Custom ScrollView를 만드는 방법으로 해결하였습니다.
핵심코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private void checkIsLocatedAtFooter() { if (rect == null) { rect = new Rect(); //사각형을 그려주는 Rect 클래스 - 현재 보이는 화면의 사각형 getLocalVisibleRect(rect); //현재 view의 절대 위치를 rect에 적용 return; } int oldBottom = rect.bottom; //지난번에 봤던 View의 바닥 getLocalVisibleRect(rect); //현재 보여지고 있는 View의 바닥 int height = getMeasuredHeight(); //해당 ScrollView가 가지고 있는 높이 View v = getChildAt(0); if (oldBottom > 0 && height > 0) { //View에 내용이 있을 경우 if (oldBottom != rect.bottom && rect.bottom == v.getMeasuredHeight()) { //스크롤이 움직였을 때 && 보여지고 있는 바닥이 ScrollView의 바닥에 //바닥에 닿았을 때 } } } | cs |
전체코드
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 32 33 34 35 36 37 38 | public class EndEventScrollView extends ScrollView { private Handler handler = null; private Rect rect; public EndEventScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); checkIsLocatedAtFooter(); } private void checkIsLocatedAtFooter() { if (rect == null) { rect = new Rect(); getLocalVisibleRect(rect); return; } int oldBottom = rect.bottom; getLocalVisibleRect(rect); int height = getMeasuredHeight(); View v = getChildAt(0); if (oldBottom > 0 && height > 0) { if (oldBottom != rect.bottom && rect.bottom == v.getMeasuredHeight()) { if (handler != null) { handler.sendEmptyMessage(/*메세지*/); } } } } public void setHandler(Handler handler) { this.handler = handler; } } | cs |
'프로그래밍 > 안드로이드' 카테고리의 다른 글
Android Bitmap 이미지를 다룰때 Out Of Memory 방지 (397) | 2016.08.22 |
---|---|
Android - 카카오링크를 사용해 컨텐츠 공유하기 (432) | 2016.08.18 |
Android AdMob 전면광고 달기 (403) | 2016.05.19 |
Android 6.0 - Permission 이용 런타임 권한 모델 (403) | 2016.05.12 |
안드로이드 - 잠금화면 위에 Activity (448) | 2016.05.11 |
댓글