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的进度条的实现就不用讲了,主要还是通过用户的位置来判断进度条的更新速度,而且还要做一个处理的是,用户向上滑动的时候,进度条需要往回走,这些都是比较简单的一些方法。

哪里有错,尽管纠正。

Adnroid 两种下拉刷新 方式的实现 sina刷新 gmail刷新,布布扣,bubuko.com

时间: 2024-10-27 13:33:25

Adnroid 两种下拉刷新 方式的实现 sina刷新 gmail刷新的相关文章

转:Selenium2.0介绍——WebDriver两种驱动浏览器的方式

如果之前熟悉Selenium RC,理解了Selenium RC是如何工作的,那么,当第一次接触Selenium WebDriver的时候,看到WebDriver居然可以不需要指定远端服务器的IP地址和端口号的,一定会惊讶的. 事实上,WebDriver有两种方式“驱动”浏览器的方式.1. Selenium Server:和Selenium RC一样的,通过指定远端服务器IP地址和端口号,由这个远端服务器来驱动浏览器.2. 直接调用:无须指定任何服务器IP地址和端口号.直接使用本地的浏览器(只要

两种访问接口的方式(get和post)

跨机器.跨语言的远程访问形式一共有三种:scoket发送数据包.http发送请求.rmi远程连接: http发送请求方式:分为post和get两种方式 importjava.io.IOException; importjava.io.InputStream; import java.util.Map; importjava.util.concurrent.atomic.AtomicInteger; importorg.apache.commons.httpclient.HttpClient; i

两个下拉框的纠葛

1.说明:后台传来两个list(datelist/weeklist)分别要放入两个下拉框,而且两个list的值一一对应,即datelist.get(i)与weeklist.get(i)值相等,要达到的效果是---->若选中第一个下拉框的值(假设值的索引为index),第二个下拉框的值必须也显示索引为index的option,反之亦然. 2.想法:由于考虑了第二个下拉框虽可以对应显示,但是显示之后,无论是恶意还是非恶意用户,都可能会对第二个下拉框重新进行选择,所以想着选中一个下拉框,第二个下拉框对

javascript两种声明函数的方式的一次深入解析

声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */}; 区别一 方式一的声明方式是先声明后使用 方式二的声明方式可以先调用,后声明 /*方式一: *先声明后使用 *

excel两个下拉框相互关联

我有两列数据,录入了所有人的信息,一个是姓名,一个是编号 现在我想再做两个下拉框,一个是选择姓名的,一个是选择编号的,我希望我选择姓名后,编号自动对应到这个人的,如果我选择编号,那么姓名也自动对应过来.请教各位excel的达人们. 这个用VLOOKUP函数做更方便 假设是在A列写入了姓名,B列写入了编号 在C2单元格设置了下拉菜单可以选择姓名, 则在D2单元格写入公式 =VLOOKUP(C2,A:B,2,) 原文 http://zhidao.baidu.com/question/14945914

两种停止Thread的方式

当你想要依据某些条件终结thread的时候,有两种最常见的方式. 设定标记 最常见停止thread的方式是设定某些标记来表示该thread应该要停止了.thread可以周期性地查询标记以判别它是否应该退出.如例: package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main {     public stati

FMX有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法

看FMX代码,发现有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法. 早前,看过文章说TMessageManager的用法,可用到的时候,又找不到,只好自己动手. 我的应用场景是这样: 当前的Frame弹出一个对话框Frame,当操作对话框的时候,想让当前的Frame跟着应响,让用户看到操作的结果,如下图,点大中小字体,后面的题目的字体会跟着变化: 参考fmx的代码,试着用消息机制实现了: 1.声明消息类: typ

ajax有两种提交数据的方式,分别为get和post(转)

ajax有两种提交数据的方式,分别为get和post.post方法可传输大于2K的数据,在Ajax里的应用不同之处在于:"post方法的请求地址与传输的数据是放在两个对象里—-请求地址放在open对象里,传输的数据放在send对象里:并且在传输数据之前定义一个传输文件HTTP头信息(setRequestHeader)" 以下为引用的内容: <SCRIPT LANGUAGE="javascript"> function saveUserInfo(){ //

ASP.NET——实现两个下拉框动态联动

引入: 在网页中,我们经常会遇到下图中的情况.首先在下拉框中选择所在的省,选择之后,第二个下拉框会自动加载出该省中的市.这样设计极大的方便了用户的查找.那这是如何实现的呢? 1.建立数据库 "省"表 "市"表 2.添加控件 3.两个下拉框分别绑定数据源 protected void Page_Load(object sender, EventArgs e) { //判断是否第一次进入页面,如果是,则绑定数据库:如果不是,则无需绑定. if (!this.IsPost