Example #1
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);
     // make sure "pull up" don't show a line in bottom when listview
     // with one page
     setFooterDividersEnabled(false);
   } else {
     mPullLoading = false;
     mFooterView.show();
     mFooterView.setState(ViewXListFooter.STATE_NORMAL);
     // make sure "pull up" don't show a line in bottom when listview
     // with one page
     setFooterDividersEnabled(true);
     // both "pull up" and "click" will invoke load more.
     mFooterView.setOnClickListener(
         new OnClickListener() {
           @Override
           public void onClick(View v) {
             startLoadMore();
           }
         });
   }
 }
Example #2
0
  private void updateFooterHeight(float delta) {
    int height = mFooterView.getBottomMargin() + (int) delta;
    if (mEnablePullLoad && !mPullLoading) {
      if (height > PULL_LOAD_MORE_DELTA) { // height enough to invoke load
        // more.
        mFooterView.setState(ViewXListFooter.STATE_READY);
      } else {
        mFooterView.setState(ViewXListFooter.STATE_NORMAL);
      }
    }
    mFooterView.setBottomMargin(height);

    // setSelection(mTotalItemCount - 1); // scroll to bottom
  }
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();
        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)) {
          // 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(ViewXListHeader.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 #4
0
 private void startLoadMore() {
   mPullLoading = true;
   mFooterView.setState(ViewXListFooter.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
 @Override
 public void computeScroll() {
   if (mScroller.computeScrollOffset()) {
     if (mScrollBack == SCROLLBACK_HEADER) {
       mHeaderView.setVisiableHeight(mScroller.getCurrY());
     } else {
       mFooterView.setBottomMargin(mScroller.getCurrY());
     }
     postInvalidate();
     invokeOnScrolling();
   }
   super.computeScroll();
 }
Example #7
0
 /** stop load more, reset footer view. */
 public void stopLoadMore() {
   if (mPullLoading == true) {
     mPullLoading = false;
     mFooterView.setState(ViewXListFooter.STATE_NORMAL);
   }
 }