【Android】ListView监听上下滑动(判断是否显示返回顶部按钮
设置滚动监听判断ListView的滚动方向同时获取屏幕高度、ListView实际高度,判断是否需要展示返回顶部按钮
package com.zihao.activity;import java.util.ArrayList;import java.util.List;import com.zihao.adapter.MyAdapter;import com.zihao.utils.ScreenUtil;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.Button;import android.widget.ListView;import android.app.Activity;/** * 主界面 * * @author zihao * @details 因为有些手机是有虚拟按键的(在计算屏幕分辨率的时候,有些可以去除掉虚拟区域的区域->如三星,有些不行->如MX3),为了计算的准确性, * 各位可以设置Activity为Theme * .NoTitleBar.Fullscreen填满屏幕(解决类似MX3这种在计算过程中把虚拟键盘算入屏幕高度的)。 */public class MainActivity extends Activity implements OnClickListener { private ListView listView;// List数据列表 private Button toTopBtn;// 返回顶部的按钮 private MyAdapter adapter; private boolean scrollFlag = false;// 标记是否滑动 private int lastVisibleItemPosition = 0;// 标记上次滑动位置 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } /** * 初始化视图 */ private void initView() { listView = (ListView) findViewById(R.id.my_listView); toTopBtn = (Button) findViewById(R.id.top_btn); adapter = new MyAdapter(this, getTitleDatas()); listView.setAdapter(adapter); toTopBtn.setOnClickListener(this); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub switch (scrollState) { // 当不滚动时 case OnScrollListener.SCROLL_STATE_IDLE:// 是当屏幕停止滚动时 scrollFlag = false; // 判断滚动到底部 if (listView.getLastVisiblePosition() == (listView .getCount() - 1)) { toTopBtn.setVisibility(View.VISIBLE); } // 判断滚动到顶部 if (listView.getFirstVisiblePosition() == 0) { toTopBtn.setVisibility(View.GONE); } break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 滚动时 scrollFlag = true; break; case OnScrollListener.SCROLL_STATE_FLING:// 是当用户由于之前划动屏幕并抬起手指,屏幕产生惯性滑动时 scrollFlag = false; break; } } /** * firstVisibleItem:当前能看见的第一个列表项ID(从0开始) * visibleItemCount:当前能看见的列表项个数(小半个也算) totalItemCount:列表项共数 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 当开始滑动且ListView底部的Y轴点超出屏幕最大范围时,显示或隐藏顶部按钮 if (scrollFlag && ScreenUtil.getScreenViewBottomHeight(listView) >= ScreenUtil .getScreenHeight(MainActivity.this)) { if (firstVisibleItem > lastVisibleItemPosition) {// 上滑 toTopBtn.setVisibility(View.VISIBLE); } else if (firstVisibleItem < lastVisibleItemPosition) {// 下滑 toTopBtn.setVisibility(View.GONE); } else { return; } lastVisibleItemPosition = firstVisibleItem; } } }); } /** * 获取标题数据列表 * * @return */ private List<string> getTitleDatas() { List<string> titleArray = new ArrayList<string>(); for (int i = 0; i < 30; i++) { titleArray.add("这是第" + i + "个item"); } return titleArray; } /** * 滚动ListView到指定位置 * * @param pos */ private void setListViewPos(int pos) { if (android.os.Build.VERSION.SDK_INT >= 8) { listView.smoothScrollToPosition(pos); } else { listView.setSelection(pos); } } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.top_btn:// 点击按钮返回到ListView的第一项 setListViewPos(0); break; } }}</string></string></string>【Android】ListView监听上下滑动(判断是否显示返回顶部按钮的更多相关文章
- Android中监听ScrollView滑动停止和滑动到底部
1.监听ScrollView滑动停止: /********************监听ScrollView滑动停止*****************************/ scrollView.s ...
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...
- Android监听ScrollView滑动到顶端和底部
Android监听ScrollView滑动到顶端和底部 package cn.testscrollview; import android.os.Bundle; import android. ...
- Android监听WebView滑动到底部
MainActivity如下: package cn.testwebview; import android.app.Activity; import android.graphics.Bitmap; ...
- Android 监听 ScrollView 滑动到最底部。
做产品时,有一个需求,需要监听ScrollView滑动到最底部.在网上找了些方法,都有这样或那样的问题,要不就是监听不精确, 要不就是重复监听,那些代码没有产品化,很不可靠. 经过自己试验,终于找到了 ...
- Android: ScrollView监听滑动到顶端和底端
在项目中需要监听ScrollView滑动到顶端和底端的时候以实现自己的ScrollView,那么怎样去监听呢?今天查看了一下ScrollView的源码,找到了一种方法.先看一下源码中的overScro ...
- Android如何监听蓝牙耳机的按键事件
写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的 ...
- Android如何监听蓝牙耳机的按键事件(转)
源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
随机推荐
- 关于java文件扩展名认识
☆ 写在前面 一名新手在历经千辛万苦写好Java程序,怀揣激动的心情去编译和执行java程序时,结果出现错误,什么找不到文件,什么不存在,找不到main方法等等.我在这里就文件后扩展名,也叫文件后缀名 ...
- PHP json_decode 函数解析 json 结果为 NULL 的解决方法
在做网站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进行模块内容的编辑操作 ( 取出保存的数据 ) 时,需要用到 json_decode() 函数 ...
- C#winform中ListView及ContextMenuStrip的使用
1.新建一个Windows窗体应用程序 2.添加文件夹及图片资源 文件夹图片(folder.png),文件图片(file.png) 3.在设计模式下添加控件 即:1个ListView(lvwData) ...
- oracle case when 语句
原文:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html CASE WHEN 表达式有两种形式 简单Case函数 CASE ...
- buffer overflow vulnerabilitie
Computer Systems A Programmer's Perspective Second Edition Avoiding security holes.For many years,bu ...
- http响应状态码301和302
HTTP返回码中301与302的区别 (2012-10-15 22:06:09) 一.官方说法 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redir ...
- unity3d中控制物体移动方法有那些及区别
1. 利用GameObject的Translate,直接改变它的Transform,前提是需要你实现准备变换矩阵.2. 用MoveTo方法,你只要知道你的目标位置即可.3. 用Math的Lerp方法计 ...
- 将真彩色转换成增强色的方法(即RGB32位或RGB24位颜色转换成RGB16位颜色的函数)
今天由于程序需要,需要将真彩色转换成增强色进行颜色匹配,上网搜了一下没搜到相应函数,于是研究了一下RGB16位的增强色,写了这个函数: public static int RGB16(int argb ...
- 蓝牙HID协议笔记
1.概述 The Human Interface Device (HID)定义了蓝牙在人机接口设备中的协议.特征和使用规程.典型的应用包括蓝牙鼠标.蓝牙键盘.蓝牙游戏手柄等.该协议改编自USB ...
- 【Java 基础篇】【第五课】类的构造函数
Java 也有自己的构造函数,如同c++一样有两个特征: 1.构造函数的名字和类的名字相同 2.构造函数没有返回值 下面来看一下这个例子: public class test { public sta ...