【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在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
随机推荐
- Html - 瀑布流
瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐 ...
- 网易前端JavaScript编码规范【转】
1. 变量命名规范 变量名包括全局变量,局部变量,类变量,函数参数等等,他们都属于这一类. 基本规范 变量命名都以类型前缀+有意义的单词组成,单词首字母都需要大写.例如:sUserName,nCoun ...
- ci调用application/views下的css,js,图片资源出现You don't have permission to access CodeIgniter on this server解决
原因是view文件下面有个.htaccess文件,里面写的是 Deny from all //拒绝所有请求 自己本地测试的话,就直接去掉,放到服务器就指定application/views文件 ...
- GitHub 初探
前言:有时候在公司上班时自己写了一些代码,打算下班回家后继续写,或者在家修改好的代码第二天要拷到公司继续完善,代码就经常要在这两者之间来回同步,通常情况下我用网盘或者U盘,但是实在是很麻烦,不断的备份 ...
- PHP函数补完 - var_export
var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码.var_export必须返回合法的php代码, 也就是 ...
- 20145235 《Java程序设计》第6周学习总结
教材学习内容总结 10.1 InputStream与OutputStream 串流设计的概念 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 从应用程序角度来看,如果要将 ...
- thinkPhp 3.1.3的验证码无法显示的问题
Image帮助类的output方法中,在下面的代码 header("Content-type: image/" . $type); 前增加代码: ob_end_clean();
- linux下php-fpm 启动参数及重要配置
约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.iniI. php-fp ...
- [转载]:Delphi xe7并行编程快速入门
现在多数设备.计算机都有多个CPU单元,即使是手机也是多核的.但要在开发中使用多核的优势,却需要一些技巧,花费时间编写额外的代码.好了,现在可以使用Delphi做并行编程了. 在Delphi.C++ ...
- Myeclipse配置 项目编码格式
修改MyEclipse 工作空间的编码 修改之后,在该工作空间下创建的任何项目,编码都是UTF-8,既,该项目下所有文件都是utf-8 格式,工作空间影响项目,项目影响文件 General --> ...