- 浏览: 129162 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
newhxj:
03-21 10:56:35.850: E/Web Conso ...
Android简易Flash播放器[转] -
roiz:
谢谢 很好正需要这资料
精确监听AbsListView滚动至底部[转]
用户使用android客户端时,当ListView滚动至底部,可以由一个按钮来提示用户是否读下一页,那么如果使用GridView呢?现在很多WEB 2.0上的体验就是当底部时自动读取下一页数据,GridView(ListView也可)可以采用这种方法。网上已经有很多文章介绍了如何判断ListView是否滚动至底部,原理是 AbsListView.getLastVisiblePosition() = (AbsListView.getCount() - 1) 即到底,如果往上拖一点,用户看起来已经离开底部,但实际上 AbsListView.getLastVisiblePosition() == (AbsListView.getCount() - 1) 依然成立,会导致误判断。本文在它们基础上加以改进,做到更精确地监听是否滚动至底部。先来看看本文程序运行的效果:
本文在 Android入门第八篇之GridView(九宫图)基础上加入滚到事件判断,文件名为AutoLoadListener.java,原理是在AbsListView.getLastVisiblePosition() = =(AbsListView.getCount() - 1) 时,保存最后一个Item的绝对坐标,如果两次获取的绝对Y值都一样,即到底然后执行回调函数......源码如下:
package com.testScroll; import android.util.Log; import android.view.View; import android.widget.AbsListView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; /** * 滚动至列表底部,读取下一页数据 */ public class AutoLoadListener implements OnScrollListener{ public interface AutoLoadCallBack { void execute(String url); } private int getLastVisiblePosition = 0,lastVisiblePositionY=0; private AutoLoadCallBack mCallback; public AutoLoadListener(AutoLoadCallBack callback) { this.mCallback = callback; } public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { //滚动到底部 if (view.getLastVisiblePosition() == (view.getCount() - 1)) { View v=(View) view.getChildAt(view.getChildCount()-1); int[] location = new int[2] ; v.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标 int y=location [1]; Log.e("x"+location[0],"y"+location[1]); if (view.getLastVisiblePosition()!=getLastVisiblePosition && lastVisiblePositionY!=y)//第一次拖至底部 { Toast.makeText(view.getContext(), "再次拖至底部,即可翻页",500).show(); getLastVisiblePosition=view.getLastVisiblePosition(); lastVisiblePositionY=y; return; } else if (view.getLastVisiblePosition()==getLastVisiblePosition && lastVisiblePositionY==y)//第二次拖至底部 { mCallback.execute(">>>>>拖至底部"); } } //未滚动到底部,第二次拖至底部都初始化 getLastVisiblePosition=0; lastVisiblePositionY=0; } } public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) { } }
主程序为testScroll.java,源码如下:
package com.testScroll; import java.util.ArrayList; import java.util.HashMap; import com.testScroll.AutoLoadListener.AutoLoadCallBack; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.SimpleAdapter; import android.widget.Toast; public class testScroll extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setTitle("精确监听AbsListView滚动至底部----hellogv"); GridView gridview = (GridView) findViewById(R.id.gridview); // 生成动态数组,并且转入数据 ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < 30; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.icon);// 添加图像资源的ID map.put("ItemText", "NO." + String.valueOf(i));// 按序号做ItemText lstImageItem.add(map); } // 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应 SimpleAdapter saImageItems = new SimpleAdapter(this, // 没什么解释 lstImageItem,// 数据来源 R.layout.night_item,// night_item的XML实现 // 动态数组与ImageItem对应的子项 new String[] { "ItemImage", "ItemText" }, // ImageItem的XML文件里面的一个ImageView,两个TextView ID new int[] { R.id.ItemImage, R.id.ItemText }); //添加自动读页的事件 AutoLoadListener autoLoadListener =new AutoLoadListener(callBack); gridview.setOnScrollListener(autoLoadListener); // 添加并且显示 gridview.setAdapter(saImageItems); // 添加消息处理 gridview.setOnItemClickListener(new ItemClickListener()); } AutoLoadCallBack callBack=new AutoLoadCallBack(){ public void execute(String url) { Toast.makeText(testScroll.this, url, 500).show(); } }; // 当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件 class ItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView<?> arg0,// The AdapterView where the // click happened View arg1,// The view within the AdapterView that was clicked int arg2,// The position of the view in the adapter long arg3// The row id of the item that was clicked ) { // 在本例中arg2=arg3 HashMap<String, Object> item = (HashMap<String, Object>) arg0 .getItemAtPosition(arg2); // 显示所选Item的ItemText setTitle((String) item.get("ItemText")); } } }
本文来自http://blog.csdn.net/hellogv/article/details/6615487
发表评论
-
android Theme使用总结
2012-12-12 19:22 1426今天对api中style下的theme整个摸了一遍。 ... -
android优化——adapter
2012-12-12 18:56 1470什么是Adapter,可以先看看我的上一篇文章,Andr ... -
listview样式设置——自定义背景、分隔[转]
2012-12-12 14:13 786在Android中,ListView是最常用的一个控件, ... -
draw9patch不失真背景
2012-12-12 00:23 12931.背景自适应且不失真问题的存在 制作自适应背 ... -
android布局之selector(背景选择器)[转]
2012-12-11 23:07 2819关于listview和button都 ... -
android布局之RelativeLayout属性
2012-12-11 23:06 1184android:layout_above ... -
Android ListView下拉刷新点击加载更多[转]
2012-12-03 09:04 1683这个ListView的下拉刷新算是不错了。网上找了很多个 ... -
BitmapFactory.Options详解[转]
2012-11-21 20:50 3281public Bitmap in ... -
Android简易Flash播放器[转]
2012-01-20 21:16 1874上一节,大体说了下在Android程序中嵌套Flash动 ... -
将flash嵌入你的程序中[转]
2012-01-20 21:12 1141无论如何,我们需要一个android2.2的平板电脑 ... -
Android实现ListView异步加载图片[转]
2011-11-30 11:17 684ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
可动态布局的Android抽屉之完整篇[转]
2011-11-10 09:00 1071上次介绍了基础篇,讲解了自定义抽屉控件的基 ... -
可动态布局的Android抽屉之基础[转]
2011-11-10 08:59 1566以前曾经介绍过《Android提高第十九篇 ... -
Android提高第二十一篇之MediaPlayer播放网络视频
2011-11-10 08:59 2615上次讲解了MediaPlayer播放网络音 ... -
Android提高第二十篇之MediaPlayer播放网络音频[转]
2011-11-10 08:58 757以前曾经地介绍过MediaPlayer的基本用 ... -
Android提高第十九篇之"多方向"抽屉[转]
2011-11-09 13:35 1173在android上要实现类似Launch的 ... -
Android提高十八篇之自定义Menu(TabMenu)[转]
2011-11-09 13:35 866用过UCWEB-Android版的人都应 ... -
Android提高十七篇之多级树形菜单的实现[转]
2011-11-09 13:35 860在Android里要实现树形菜单,都是用 ... -
Android提高十六篇之使用NDK把彩图转换灰度图[转]
2011-11-09 13:34 1015在Android上使 ... -
Android提高第十五篇之ListView自适应实现表格[转]
2011-11-09 13:34 848上次介绍了使用GridView实现表格, ...
相关推荐
这是个快速实现在AbsListView或ScrollView滚动时隐藏悬浮在在AbsListView或ScrollView之上的控件的项目
可显示abslistview控件头部一起滚动效果,带贴磁效果
本文实例讲述了Android编程学习之抽象类AbsListView用法。分享给大家供大家参考,具体如下: 一、继承关系 public abstract class AbsListView extends AdapterView java.lang.Object android.view.View ...
1.监听滚动事件 首先要给listview添加setOnScrollListener监听,注意这个监听在recyclerView上是addOnScrollListener,也就是说下面代码同时支持recyclerView。 public int firstVisible=0,visibleCount=0, ...
Android中文API(123)——AbsListView[文].pdf
支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉). 支持自定义回弹动画的插值器,实现各种炫酷的动画效果. 支持设置主题来适配任何场景的 App,不会出现炫酷但很尴尬的情况. 支持设多种...
AbsListView. Features Configuration allows you to setup automatic adding/removing of the loading list item (enabled by default) Custom loading list item - inflate and bind (default loading list item ...
安卓PullRefreshLayout
HorizontalScrollView支持在他们的滚动方向上做超屏幕滑动。有自定义的View想要支持这个功能,可以对OverScrollLayout设置OverScrollCheckListener.也可以通过设置OnOverScrollListener来监听是否是正在做超屏幕滑动...
//添加滚动条滚到最底部,加载余下的元素 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { l
多开发者不知道ListView列表控件的快速滚动滑块是... 还有一点就是当你的滚动内容较小,不到当前ListView的3个屏幕高度时则不会出现这个快速滚动滑块,同时该方法仍然是AbsListView的基础方法,可以在ListView或Grid
Android库,用于在RecyclerView或AbsListView创建简单的分页功能(又称无限滚动)。 特征 配置允许您设置加载列表项目的自动添加/删除(默认情况下启用) 自定义加载列表项-充气并绑定(如果未提供自定义列表,则...
mugen是用于在Android上实现无限滚动的微库。 特征 用几行代码将无限滚动添加到列表中。 通过配置,您可以决定如何以及何时触发加载。 为网络使用优化而获取所有项目后,您甚至可以禁用更多负载。 同时支持...
Android-AbsListView-Drag-And-Drop 具有拖放功能的复杂 ListView 和 GridView。 拖拽项目到下拉菜单视图,回调下拉功能。 滑动选择怎么看? 拖放和MultiChoice(官方和自定义) 滑动选择,例如 Google 相册用法多选...
RecyclerView,AbsListView适配器,支持多种视图样式,支持吸顶,侧滑删除,拖拽效果 用于recyclerView,absListView的基本适配器,支持多种项目视图类型,粘性页眉(节),拖放,滑动关闭 产品特点 代码优雅,无需...
本文实例讲述了Android简单记录和恢复ListView滚动位置的方法。分享给大家供大家参考,具体如下: 有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码: //列表滚动 private...
免去重新定义多个相似的适配器繁琐工作,只需要提供一个itemitem的layout文件和一个自定义的item样式java文件
Android万能适配器,通吃所有的AbsListView、RecyclerView。 添加依赖 compile 'com.yuyh.easyadapter:library:1.1.4' 用法 package com.yuyh.easyadapter; import android.content.Context; import ...
1.监听滚动事件 首先要给listview添加setOnScrollListener监听,注意这个监听在recyclerView上是addOnScrollListener,也就是说下面代码同时支持recyclerView。 public int firstVisible=0,visibleCount=0, ...