스크롤 뷰 가 맨 밑 이나 맨 위로 미 끄 러 지면 데 이 터 를 불 러 옵 니 다.

4042 단어 android
하나의 기능 을 실현 하려 면 스크롤 뷰 가 맨 밑 으로 미 끄 러 질 때 이벤트 가 발생 하여 다른 데 이 터 를 불 러 와 야 합 니 다.많은 사람들 이 ScrollView 가 ListViev 처럼 setOn ScrollListener 가 될 수 있다 고 생각 합 니 다.사실은 그리 간단 하지 않 습 니 다.ScrollView 는 이 인터페이스 가 전혀 없 기 때문에 baidu 를 한 바퀴 돌 았 지만 적당 한 답 을 찾 지 못 했 습 니 다.어 쩔 수 없 이 구 글 만 갈 수 밖 에 없 었 습 니 다.이 문 제 를 한꺼번에 해결 하 였 습 니까?아니면 외국인 이 비교적 강하 기 때 문 입 니까?하하,이것 은 제 가 방문 한 사이트 입 니 다. 
http://stackoverflow.com/questions/2864563/how-do-i-know-that-the-scrollview-is-already-scrolled-to-the-bottom
 
데이터 가 한 페이지 미 만 이면 onBottom 방법 을 실행 합 니 다!보통 게 으 름 으로 불 러 오 면 데이터 가 한 페이지 를 넘 기 때문에 나 는 이 문 제 를 자세히 고려 하지 않 았 다! 
스크롤 뷰 를 클래스 로 봉 인 했 습 니 다.원본 코드 는 다음 과 같 습 니 다. 
package com.ql.view;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
 
public class LazyScrollView extends ScrollView{
	private static final String tag="LazyScrollView";
	private Handler handler;
	private View view;
	public LazyScrollView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	public LazyScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
	public LazyScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}
	//        
	public int computeVerticalScrollRange(){
		return super.computeHorizontalScrollRange();
	}
	public int computeVerticalScrollOffset(){
		return super.computeVerticalScrollOffset();
	}
	private void init(){
		
		this.setOnTouchListener(onTouchListener);
		handler=new Handler(){
        	@Override
			public void handleMessage(Message msg) {
				// process incoming messages here
				super.handleMessage(msg);
				switch(msg.what){
				case 1:
					if(view.getMeasuredHeight() <= getScrollY() + getHeight()) {
						if(onScrollListener!=null){
							onScrollListener.onBottom();
						}
						
					}else if(getScrollY()==0){
						if(onScrollListener!=null){
							onScrollListener.onTop();
						}
					}
					else{
						if(onScrollListener!=null){
							onScrollListener.onScroll();
						}
					}
					break;
				default:
					break;
				}
			}
        };
		
	}
	
	  OnTouchListener onTouchListener=new OnTouchListener(){

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					break;
				case MotionEvent.ACTION_UP:
					if(view!=null&&onScrollListener!=null){
						handler.sendMessageDelayed(handler.obtainMessage(1), 200);
					}
					break;

				default:
					break;
				}
				return false;
			}
	    	
	    };
	    
	    /**
	     *      View,         MeasuredHeight,       ScrollY+getHeight   。
	     */
	    public void getView(){
	    	this.view=getChildAt(0);
	    	if(view!=null){
	    		init();
	    	}
	    }
	    
	    /**
	     *     
	     * @author admin
	     *
	     */
	    public interface OnScrollListener{
	    	void onBottom();
	    	void onTop();
	    	void onScroll();
	    }
	    private OnScrollListener onScrollListener;
	    public void setOnScrollListener(OnScrollListener onScrollListener){
	    	this.onScrollListener=onScrollListener;
	    }
}

사용 할 때 도 간단 합 니 다.보통 이렇게 사용 합 니 다.
scrollView=(LazyScrollView)findViewById(R.id.scrollView);
        scrollView.getView();
        scrollView.setOnScrollListener(new OnScrollListener() {
			
			@Override
			public void onTop() {
				// TODO Auto-generated method stub
				Log.d(tag,"------      ------");
			}
			
			@Override
			public void onScroll() {
				// TODO Auto-generated method stub
				Log.d(tag,"      ,      ");
			}
			
			@Override
			public void onBottom() {
				// TODO Auto-generated method stub
				Log.d(tag,"------      ------");
			}
		});

좋은 웹페이지 즐겨찾기