Android 自定义ListView和GridView

state = DONE;

changeHeaderViewByState();

Log.e(TAG, “state == PULL_TO_REFRESH”);

}

if (state == RELEASE_TO_REFRESH) {

state = REFRESHING;

changeHeaderViewByState();

onRefresh();

Log.e(TAG, “state == RELEASE_TO_REFRESH”);

}

}

isRecored = false;

isBack = false;

break;

case MotionEvent.ACTION_MOVE:

int tempY = (int) event.getY();

if (!isRecored && firstItemIndex == 0) {

Log.e(TAG, “MotionEvent.ACTION_MOVE”);

isRecored = true;

startY = tempY;

}

if (state != REFRESHING && isRecored && state != LOADING) {

// 保证在设置padding的过程中,当前的位置一直是在head,否则如果当列表超出屏幕的话,当在上推的时候,列表会同时进行滚动

// 可以松手去刷新了

if (state == RELEASE_TO_REFRESH) {

setSelection(0);

// 往上推了,推到了屏幕足够掩盖head的程度,但是还没有推到全部掩盖的地步

if (((tempY - startY) / RATIO < headContentHeight)

&& (tempY - startY) > 0) {

state = PULL_TO_REFRESH;

changeHeaderViewByState();

Log.e(TAG, “由松开刷新状态转变到下拉刷新状态”);

}

// 一下子推到顶了

else if (tempY - startY <= 0) {

state = DONE;

changeHeaderViewByState();

Log.e(TAG, “由松开刷新状态转变到done状态”);

}

// 往下拉了,或者还没有上推到屏幕顶部掩盖head的地步

else {

// 不用进行特别的操作,只用更新paddingTop的值就行了

}

}

// 还没有到达显示松开刷新的时候,DONE或者是PULL_To_REFRESH状态

if (state == PULL_TO_REFRESH) {

setSelection(0);

// 下拉到可以进入RELEASE_TO_REFRESH的状态

if ((tempY - startY) / RATIO >= headContentHeight) {

state = RELEASE_TO_REFRESH;

isBack = true;

changeHeaderViewByState();

Log.e(TAG, “由done或者下拉刷新状态转变到松开刷新”);

}

// 上推到顶了

else if (tempY - startY <= 0) {

state = DONE;

changeHeaderViewByState();

Log.e(TAG, “由Done或者下拉刷新状态转变到done状态”);

}

}

// done状态下

if (state == DONE) {

if (tempY - startY > 0) {

state = PULL_TO_REFRESH;

changeHeaderViewByState();

}

}

// 更新headView的size

if (state == PULL_TO_REFRESH) {

headView.setPadding(0, -1 * headContentHeight

  • (tempY - startY) / RATIO, 0, 0);

}

// 更新headView的paddingTop

if (state == RELEASE_TO_REFRESH) {

headView.setPadding(0, (tempY - startY) / RATIO

  • headContentHeight, 0, 0);

}

}

break;

}

}

return super.onTouchEvent(event);

}

// 当状态改变时候,调用该方法,以更新界面

private void changeHeaderViewByState() {

switch (state) {

case RELEASE_TO_REFRESH:

arrowImageView.setVisibility(View.VISIBLE);

progressBar.setVisibility(View.GONE);

tipsTextview.setVisibility(View.VISIBLE);

lastUpdatedTextView.setVisibility(View.VISIBLE);

arrowImageView.clearAnimation();

arrowImageView.startAnimation(animation);

tipsTextview.setText(“放开以刷新”);

Log.e(TAG, “State–>RELEASE_TO_REFRESH”);

break;

case PULL_TO_REFRESH:

progressBar.setVisibility(View.GONE);

tipsTextview.setVisibility(View.VISIBLE);

lastUpdatedTextView.setVisibility(View.VISIBLE);

arrowImageView.clearAnimation();

arrowImageView.setVisibility(View.VISIBLE);

// 是由RELEASE_To_REFRESH状态转变来的

if (isBack) {

isBack = false;

arrowImageView.clearAnimation();

arrowImageView.startAnimation(reverseAnimation);

tipsTextview.setText(“下拉刷新”);

} else {

tipsTextview.setText(“下拉刷新”);

}

Log.e(TAG, “State–>PULL_TO_REFRESH”);

break;

case REFRESHING:

headView.setPadding(0, 0, 0, 0);

progressBar.setVisibility(View.VISIBLE);

arrowImageView.clearAnimation();

arrowImageView.setVisibility(View.GONE);

tipsTextview.setText(“正在刷新…”);

lastUpdatedTextView.setVisibility(View.VISIBLE);

Log.e(TAG, “State–>REFRESHING”);

break;

case DONE:

headView.setPadding(0, -1 * headContentHeight, 0, 0);

progressBar.setVisibility(View.GONE);

arrowImageView.clearAnimation();

arrowImageView.setImageResource(R.drawable.ic_launcher);

tipsTextview.setText(“下拉刷新”);

lastUpdatedTextView.s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值