package com.lling.qiqu.ui;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.lidroid.xutils.bitmap.PauseOnScrollListener;
import com.lling.qiqu.R;
import com.lling.qiqu.utils.BitmapUtil;

public class LoadListView extends ListView implements
		OnScrollListener {

    private LayoutInflater inflater;  
  
    //上啦加载布局
    private View footView;
    
    private ImageView footerProgressImg;
    private Animation progressAnimation;
    
    private boolean haveScrollbar = true;  
  
    public LoadListView(Context context) {  
        super(context);  
        init(context);  
    }  
  
    public LoadListView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        init(context);  
    }  
  
    private void init(Context context) { 
    	progressAnimation = AnimationUtils.loadAnimation(context,
				R.anim.progress_anim);
    	inflater = LayoutInflater.from(context);
        footView = inflater.inflate(R.layout.footer, null);
//        footView.findViewById(R.id.load_layout).setVisibility(View.GONE);
        footerProgressImg = (ImageView) footView.findViewById(R.id.progress);
        footerProgressImg.startAnimation(progressAnimation);
        addFooterView(footView, null, false);
        // 设置滚动监听事件  
//        setOnScrollListener(this);  
        //设置listview加载时不滚动
		setOnScrollListener(new PauseOnScrollListener(BitmapUtil.mBitmapUtils, false, true, this));
  
    }  
	private boolean isLoadingable = false; //是否可以加载更多
	private boolean hasMoreData = false;  //有更多数据
	//正在加载底部数据
	private boolean isFootLoading = false;
	
	public void setHasMoreData(boolean hasMoreData) {
		this.hasMoreData = hasMoreData;
		if(!hasMoreData) {
			footView.findViewById(R.id.load_layout).setVisibility(View.GONE);
		}
	}
    @Override  
    public void onScrollStateChanged(AbsListView view, int scrollState) {  
    	if(isFootLoading)
			return;		
		if(isLoadingable && scrollState==SCROLL_STATE_IDLE && hasMoreData){
			prepareFootLoading();
		}
    }  
    
    public void prepareFootLoading() {
    	if(isFootLoading) {
    		return;
    	}
    	footerProgressImg.startAnimation(progressAnimation);
		footView.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);
		isFootLoading = true;
		setSelectionFromTop(getCount()-1, 0);  //滚动到最底端
		onFootLoading();
    }
  
    @Override  
    public void onScroll(AbsListView view, int firstVisibleItem,  
        int visibleItemCount, int totalItemCount) {  
		//因为刚进入的时候,lastPos=-1,count=0,这个时候不能让它执行onAddFoot方法
		if(getLastVisiblePosition()==totalItemCount-1 && !isLoadingable && getLastVisiblePosition() != -1){
			isLoadingable = true;
		}	
    }  
  
    /**
	 * 上拉刷新监听器
	 *
	 */
	public interface OnFootLoadingListener{
		/**
		 * 这里是执行后台获取数据的过程
		 */
		void onFootLoading();
	}
	private OnFootLoadingListener onFootLoadingListener;
	public void setOnFootLoadingListener(
			OnFootLoadingListener onFootLoadingListener) {
		this.onFootLoadingListener = onFootLoadingListener;
	}
	
	//加载更多
	private void onFootLoading() {
		if(onFootLoadingListener != null) {
			onFootLoadingListener.onFootLoading();
		}
	}
	
	/**
	 * 底部数据加载完成,用户需要加入一个removeFootView的操作
	 */
	public void onFootLoadingComplete(boolean goneFooter){
		isLoadingable = false;
		isFootLoading = false;
		if(goneFooter){
			if(progressAnimation != null) {
				progressAnimation.cancel();
			}
			footView.findViewById(R.id.load_layout).setVisibility(View.GONE);
		}		
	}
  
    public void setMoreDataMsg(String moreDataMsg) {
    	if(footView != null) {
    		((TextView) footView.findViewById(R.id.more_data_msg)).setText(moreDataMsg);
    	}
	}
    
    public void setHaveScrollbar(boolean haveScrollbar) {   
        this.haveScrollbar = haveScrollbar;   
    }  
	
	@Override   
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   
        if (haveScrollbar == false) {   
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   
            super.onMeasure(widthMeasureSpec, expandSpec);   
        } else {   
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);   
        }   
    } 
}