package com.echoliv.uhoem.view; import android.content.Context; import android.graphics.Canvas; import android.support.v4.widget.SwipeRefreshLayout; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.AbsListView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.echoliv.uhoem.R; public class RefreshLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener { /** * listview實例 */ private ListView mListView; /** * 上拉監聽器, 到了最底部的上拉加載操做 */ private OnLoadListener mOnLoadListener; private boolean mLastItemVisible; /** * 是否在加載中 ( 上拉加載更多 ) */ private boolean isLoading = false; private boolean load_more = true; private View footView; //TODO private GestureDetector mGestureDetector; private boolean canScroll; private ProgressBar bottom_progressBar; private TextView tip_view; public RefreshLayout(Context context) { this(context, null); } public RefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); mGestureDetector = new GestureDetector(context, new YScrollDetector()); canScroll=true; this.setColorSchemeResources(R.color.holo_blue_bright, R.color.holo_green_light, R.color.holo_orange_light, R.color.holo_red_light); footView = LayoutInflater.from(context).inflate(R.layout.ac_footer, null); bottom_progressBar = (ProgressBar) footView.findViewById(R.id.bottom_progressBar); tip_view = (TextView) footView.findViewById(R.id.tip_view); footView.setVisibility(View.GONE); } public void addFooterView() { mListView.addFooterView(footView); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } /** * 獲取ListView對象 */ private void getListView() { int childs = getChildCount(); if (childs > 0) { View childView = getChildAt(0); if (childView instanceof ListView) { mListView = (ListView) childView; // 設置滾動監聽器給ListView, 使得滾動的狀況下也能夠自動加載 mListView.setOnScrollListener(this); } } } public View getFootView() { return footView; } /** * @param loadListener */ public void setOnLoadListener(OnLoadListener loadListener) { mOnLoadListener = loadListener; } /** * 加載更多的監聽器 * * @author mrsimple */ public static interface OnLoadListener { public void onLoad(); } /** * @param loading */ public void setLoading(boolean loading) { isLoading = loading; } /** * @param loadmore */ public void setLoad_More(boolean loadmore) { load_more = loadmore; if (!load_more) { footView.setVisibility(View.VISIBLE); bottom_progressBar.setVisibility(View.GONE); tip_view.setText(getResources().getString(R.string.more_tip)); } else { bottom_progressBar.setVisibility(View.VISIBLE); tip_view.setText(getResources().getString(R.string.load_tip)); footView.setVisibility(View.GONE); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (!isLoading && load_more && mLastItemVisible) { footView.setVisibility(View.VISIBLE); setLoading(true); mOnLoadListener.onLoad(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mLastItemVisible = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount - 1); } class YScrollDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if(canScroll) if (Math.abs(distanceY) >= Math.abs(distanceX)) canScroll = true; else canScroll = false; return canScroll; } } public boolean onInterceptTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_UP) canScroll = true; return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev); } }