Example #1
0
  // 改变底部视图高度
  private void updateFooterHeight(float delta) {
    int height = mFooterView.getBottomMargin() + (int) delta;
    if (mEnablePullLoad && !mPullLoading) {
      if (height > PULL_LOAD_MORE_DELTA) { // 高度足以调用加载更多
        mFooterView.setState(XListViewFooter.STATE_READY);
      } else {
        mFooterView.setState(XListViewFooter.STATE_NORMAL);
      }
    }
    mFooterView.setBottomMargin(height);

    // setSelection(mTotalItemCount - 1); // scroll to bottom
  }
Example #2
0
  @Override
  public boolean onTouchEvent(MotionEvent ev) {
    if (mLastY == -1) {
      mLastY = ev.getRawY();
    }

    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mLastY = ev.getRawY();
        break;
      case MotionEvent.ACTION_MOVE:
        final float deltaY = ev.getRawY() - mLastY;
        mLastY = ev.getRawY();
        if (getFirstVisiblePosition() == 0 && (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) {
          // the first item is showing, header has shown or pull down.
          updateHeaderHeight(deltaY / OFFSET_RADIO);
          invokeOnScrolling();
        } else if (getLastVisiblePosition() == mTotalItemCount - 1
            && (mFooterView.getBottomMargin() > 0 || deltaY < 0)
            && mEnablePullLoad) {
          // last item, already pulled up or want to pull up.
          updateFooterHeight(-deltaY / OFFSET_RADIO);
        }
        break;
      default:
        mLastY = -1; // reset
        if (getFirstVisiblePosition() == 0) {
          // invoke refresh
          if (mEnablePullRefresh && mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
            mPullRefreshing = true;
            mHeaderView.setState(XListViewHeader.STATE_REFRESHING);
            if (mListViewListener != null) {
              mListViewListener.onRefresh();
            }
          }
          resetHeaderHeight();
        } else if (getLastVisiblePosition() == mTotalItemCount - 1) {
          // invoke load more.
          if (mEnablePullLoad
              && mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA
              && !mPullLoading) {
            startLoadMore();
          }
          resetFooterHeight();
        }
        break;
    }
    return super.onTouchEvent(ev);
  }
Example #3
0
  // 触发事件
  @Override
  public boolean onTouchEvent(MotionEvent ev) {
    if (mLastY == -1) {
      mLastY = ev.getRawY();
    }

    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mLastY = ev.getRawY();
        break;
      case MotionEvent.ACTION_MOVE:
        final float deltaY = ev.getRawY() - mLastY;
        mLastY = ev.getRawY();
        //			System.out.println("数据监测:" + getFirstVisiblePosition() + "---->"
        //					+ getLastVisiblePosition());
        if (getFirstVisiblePosition() == 0 && (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) {
          // 第一项显示,标题显示或拉下来.
          updateHeaderHeight(deltaY / OFFSET_RADIO);
          invokeOnScrolling();
        } else if (getLastVisiblePosition() == mTotalItemCount - 1
            && (mFooterView.getBottomMargin() > 0 || deltaY < 0)) {
          // 最后一页,已停止或者想拉起
          updateFooterHeight(-deltaY / OFFSET_RADIO);
        }
        break;
      default:
        mLastY = -1; // 重置
        if (getFirstVisiblePosition() == 0) {
          // 调用刷新,如果头部视图高度大于设定高度。
          if (mEnablePullRefresh && mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
            mPullRefreshing = true; // 那么刷新
            mHeaderView.setState(XListViewHeader.STATE_REFRESHING);
            if (mListViewListener != null) {
              mListViewListener.onRefresh();
            }
          }
          resetHeaderHeight(); // 刷新完毕,重置头部高度,也就是返回上不
        }
        if (getLastVisiblePosition() == mTotalItemCount - 1) {
          // 调用加载更多.
          if (mEnablePullLoad && mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {
            startLoadMore(); // 如果底部视图高度大于可以加载高度,那么就开始加载
          }
          resetFooterHeight(); // 重置加载更多视图高度
        }
        break;
    }
    return super.onTouchEvent(ev);
  }
Example #4
0
 private void startLoadMore() {
   mPullLoading = true;
   mFooterView.setState(XListViewFooter.STATE_LOADING);
   if (mListViewListener != null) {
     mListViewListener.onLoadMore();
   }
 }
Example #5
0
 private void resetFooterHeight() {
   int bottomMargin = mFooterView.getBottomMargin();
   if (bottomMargin > 0) {
     mScrollBack = SCROLLBACK_FOOTER;
     mScroller.startScroll(0, bottomMargin, 0, -bottomMargin, SCROLL_DURATION);
     invalidate();
   }
 }
Example #6
0
	/**
	 * enable or disable pull up load more feature.
	 * 
	 * @param enable
	 */
	public void setPullLoadEnable(boolean enable) {
		mEnablePullLoad = enable;
		if (!mEnablePullLoad) {
			mFooterView.hide();
			mFooterView.setOnClickListener(null);
		} else {
			mPullLoading = false;
			mFooterView.show();
			mFooterView.setState(XListViewFooter.STATE_NORMAL);
			// both "pull up" and "click" will invoke load more.
			mFooterView.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					startLoadMore();
				}
			});
		}
	}
Example #7
0
 /**
  * 启用或禁用加载更多的功能.
  *
  * @param enable
  */
 public void setPullLoadEnable(boolean enable) {
   mEnablePullLoad = enable;
   if (!mEnablePullLoad) {
     mFooterView.hide(); // 隐藏
     mFooterView.setOnClickListener(null);
   } else {
     mPullLoading = false;
     mFooterView.show(); // 显示
     mFooterView.setState(XListViewFooter.STATE_NORMAL);
     // both "上拉" 和 "点击" 将调用加载更多.
     mFooterView.setOnClickListener(
         new OnClickListener() {
           @Override
           public void onClick(View v) {
             startLoadMore();
           }
         });
   }
 }
Example #8
0
 @Override
 public void computeScroll() {
   if (mScroller.computeScrollOffset()) {
     if (mScrollBack != SCROLLBACK_HEADER) {
       mFooterView.setBottomMargin(mScroller.getCurrY());
     }
     postInvalidate();
     invokeOnScrolling();
   }
   super.computeScroll();
 }
Example #9
0
  @Override
  public boolean onTouchEvent(MotionEvent ev) {
    if (mLastY == -1) {
      mLastY = ev.getRawY();
    }

    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mLastY = ev.getRawY();
        break;
      case MotionEvent.ACTION_MOVE:
        final float deltaY = ev.getRawY() - mLastY;
        mLastY = ev.getRawY();
        if (getFirstVisiblePosition() == 0 && deltaY > 0) {
          invokeOnScrolling();
        } else if (getLastVisiblePosition() == mTotalItemCount - 1
            && (mFooterView.getBottomMargin() > 0 || deltaY < 0)) {
          // last item, already pulled up or want to pull up.
          updateFooterHeight(-deltaY / OFFSET_RADIO);
        }
        break;
      default:
        mLastY = -1; // reset
        if (getLastVisiblePosition() == mTotalItemCount - 1) {
          // invoke load more.
          if (mEnablePullLoad
              && mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA
              && !mPullLoading) {
            startLoadMore();
          }
          resetFooterHeight();
        }
        break;
    }
    return super.onTouchEvent(ev);
  }
Example #10
0
 public void setNoDataHint(String hint) {
   mFooterView.setNoDataHint(hint);
 }
Example #11
0
 /** stop load more, reset footer view. */
 public void stopLoadMore() {
   if (mPullLoading == true) {
     mPullLoading = false;
     mFooterView.setState(XListViewFooter.STATE_NORMAL);
   }
 }
Example #12
0
 public void loadComplete() {
   if (mPullLoading == true) {
     mFooterView.setState(XListViewFooter.STATE_COMPLETE);
   }
 }