设为首页 加入收藏

TOP

Android下拉刷新上拉加载简单的实现方法(五)
2015-07-16 12:55:29 来源: 作者: 【 】 浏览:7
Tags:Android 下拉 刷新 加载 简单 实现 方法
ght = mHeaderViewHeight;
? }
? mScrollBack = SCROLLBACK_HEADER;
? mScroller.startScroll(0, height, 0, finalHeight - height,
? ? SCROLL_DURATION);
? // trigger computeScroll
? invalidate();
?}


?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(XListViewFooter.STATE_READY);
? ?} else {
? ? mFooterView.setState(XListViewFooter.STATE_NORMAL);
? ?}
? }
? mFooterView.setBottomMargin(height);


//? setSelection(mTotalItemCount - 1); // scroll to bottom
?}


?private void resetFooterHeight() {
? int bottomMargin = mFooterView.getBottomMargin();
? if (bottomMargin > 0) {
? ?mScrollBack = SCROLLBACK_FOOTER;
? ?mScroller.startScroll(0, bottomMargin, 0, -bottomMargin,
? ? ?SCROLL_DURATION);
? ?invalidate();
? }
?}


?private void startLoadMore() {
? mPullLoading = true;
? mFooterView.setState(XListViewFooter.STATE_LOADING);
? if (mListViewListener != null) {
? ?mListViewListener.onLoadMore();
? }
?}


?@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(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);
?}


?@Override
?public void computeScroll() {
? if (mScroller.computeScrollOffset()) {
? ?if (mScrollBack == SCROLLBACK_HEADER) {
? ? mHeaderView.setVisiableHeight(mScroller.getCurrY());
? ?} else {
? ? mFooterView.setBottomMargin(mScroller.getCurrY());
? ?}
? ?postInvalidate();
? ?invokeOnScrolling();
? }
? super.computeScroll();
?}


?@Override
?public void setOnScrollListener(OnScrollListener l) {
? mScrollListener = l;
?}


?@Override
?public void onScrollStateChanged(AbsListView view, int scrollState) {
? if (mScrollListener != null) {
? ?mScrollListener.onScrollStateChanged(view, scrollState);
? }
?}


?@Override
?public void onScroll(AbsListView view, int firstVisibleItem,
? ?int visibleItemCount, int totalItemCount) {
? // send to user's listener
? mTotalItemCount = totalItemCount;
? if (mScrollListener != null) {
? ?mScrollListener.onScroll(view, firstVisibleItem

首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Shell 脚本面试问题大全 下一篇微软2014校园招聘笔试试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: