首页 > 代码库 > Adnroid 两种下拉刷新 方式的实现 sina刷新 gmail刷新

Adnroid 两种下拉刷新 方式的实现 sina刷新 gmail刷新

sina刷新

这种下拉刷新的方式是比较简单的。上个图:


这种刷新方式的思路是这样的:

首先是需要一个HeaderVIew也就是刷新时头部所显示出来的数据。这个view的布局随你,长啥样自己定夺。

其他不是特别重要,重要的是用户触摸事件的捕捉,看到github上的大神的一些方法是比较正规的,我就自己用自己的方法尝试,主要是捕捉到用户的点击事件来计算用户所触摸到的位置然后来更新头部布局的位置。



这个重要的代码贴出来:

	case MotionEvent.ACTION_MOVE:
			currentY = (int) ev.getY();
			if (!ISREFRESH) {
				if (currentY > getHeight()/10) {
					progressBar.setVisibility(0);
					tipsTextview.setVisibility(0);
					lastUpdatedTextView.setVisibility(0);
					tempY=tempY+5;
					headView.setPadding(0, -1 * headContentHeight + tempY, 0, 0);
					headView.invalidate();
					if (tempY >= headContentHeight) {
						tempY = 0;
						add.GetNewTExt("new text");
						ISREFRESH = true;
					}
				}
			}
			break;
		case MotionEvent.ACTION_UP:
			progressBar.setVisibility(8);
			tipsTextview.setVisibility(8);
			lastUpdatedTextView.setVisibility(8);
			ISREFRESH = false;
			break;
		}

ISREFRESH判断是否刷新,如果刷新结束了就不需要再加载,然后需要隐藏头部布局,通过headView.setPadding这个方法来实时地控制头部布局与顶部位置的距离,达到慢慢出现的效果。至于其他的一些效果,比如向上拉的时候慢慢隐藏等等效果的道理都是一样的。



--------------------------------------------------------------------------------



Gmail刷新


4.0以后的gmail(好象是)的下拉刷新的效果比较炫,如图:



这种下拉刷新的效果就变成了一条线了。

这种效果有两种实现方式,代码我就不贴了,比较简单。

1.通过画图的方式实现

自己设置一个大小小于5或者是通过比例来设置的大小的头部布局,这个布局就只是一个布局,里面没有任何东西。然后上面提到的用户操作的时候,头部布局就开始绘图,从中间的地方往两边画,其实就是画Rect,画的速度和用户所触摸的位置来控制,通过自己定义的接口去动态的更新绘图就可以了,不过个人感觉这个方法不是特别好。

2.通过progress来显示

这个就简单了,就是在头部布局中添加两个progress,progress的进度条的实现就不用讲了,主要还是通过用户的位置来判断进度条的更新速度,而且还要做一个处理的是,用户向上滑动的时候,进度条需要往回走,这些都是比较简单的一些方法。


哪里有错,尽管纠正。