怎样知道listview嵌套滑动卡顿滑动了多远

1227人阅读
Android(1)
ListView 如何判断ListView是否可以滑动(即ListView的Item总数是否超过可视区域,或者说是否需要滑动,也就是说ListView的所有item都在一个屏幕内的情况,不需要滑动ListView就可以显示ListView的所有Item)。
* @Description: 判断ListView是否可以滑动,即ListView的Item是否显示在同一个屏幕内,不需要滑动就能全部显示。
* @author zlf
* @date 日 下午 15:06:08
@SuppressLint(&NewApi&)
public static boolean listViewCanScroll(ListView mListView){
boolean canScrollList=mListView.canScrollList(1);//Android自带的方法,好像不太管用。
Clog.e(TAG,Constants.LOG_PLACE_HOLDER+& canScrollList &+canScrollList);
boolean canScroll=
int childCount=mListView.getChildCount();//返回的是当前可见区域的 Item 的总数。
int count=mListView.getCount();//返回的是 ListView 的所有的 Item 的总数。
int firstVisiblePosition=mListView.getFirstVisiblePosition();
int lastVisibkePosition=mListView.getLastVisiblePosition();
Clog.e(TAG,Constants.LOG_PLACE_HOLDER+& mListView.getChildCount() &+childCount);
Clog.e(TAG,Constants.LOG_PLACE_HOLDER+& mListView.getCount() &+count);
Clog.e(TAG,Constants.LOG_PLACE_HOLDER+& mListView.getFirstVisiblePosition() &+firstVisiblePosition);
Clog.e(TAG,Constants.LOG_PLACE_HOLDER+& mListView.getLastVisiblePosition() &+lastVisibkePosition);
* 第一个可见的Item等于0,证明ListView是在最顶部,
*并且最后一个可见I的tem+1(Item是从0开始的)等于Item的总数的话,证明ListView在最底部
*如果一个ListView同时可以看见顶部和底部的话,证明该ListView是不可滑动的,即ListView的Item
*全在一个屏幕内,不需要滑动。
if(firstVisiblePosition==0&&count==lastVisibkePosition+1){
canScroll=
canScroll=
Clog.e(TAG,Constants.LOG_PLACE_HOLDER+&canScroll &+canScroll);
return canS
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1745次
排名:千里之外ListView判断是否滑动到最底部 - 简书
ListView判断是否滑动到最底部
1、判断listView滑动到最后一个Item的内容的底部(即listview不能再向下滑):
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView absListView, int i) {
switch (i) {
case SCROLL_STATE_IDLE:
flag = isListViewReachBottomEdge(absListView);
public void onScroll(AbsListView absListView, int i, int i1, int i2) {}
public boolean isListViewReachBottomEdge(final AbsListView listView) {
boolean result =
if (listView.getLastVisiblePosition() == (listView.getCount() - 1)) {
final View bottomChildView = listView.getChildAt(listView.getLastVisiblePosition() - listView.getFirstVisiblePosition());
result = (listView.getHeight() &= bottomChildView.getBottom());
注:view的getBottom()表示的是该View底部到父控件的左上角的垂直距离。当ListView的最后一个child View的getBottom()小于等于ListView的getHeight()时,就表示ListView滚动到底部或已经在底部了,不能再向下滑动了。
public abstract void onScrollStateChanged (AbsListView view, int scrollState)
scrollState 分 SCROLL_STATE_TOUCH_SCROLL 和 SCROLL_STATE_IDLE,为正在滑动和停止滑动后。
public void onScrollStateChanged (RecyclerView recyclerView, int newState)
scrollState分SCROLL_STATE_IDLE,SCROLL_STATE_DRAGGING 和 SCROLL_STATE_SETTLING.
2、判断listView滑动到最后一个Item的内容的头部:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView absListView, int i) {
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
firstVisibleItem表示在现时屏幕第一个ListItem(部分显示的ListItem也算)在整个ListView的位置(下标从0开始)
visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数
totalItemCount表示ListView的ListItem总数
flag = ((firstVisibleItem + visibleItemCount) == totalItemCount);
3、判断listView滑动到最后一个Item的内容的顶部:
public boolean isListViewReachTopEdge(final ListView listView) {
boolean result =
if (listView.getFirstVisiblePosition() == 0) {
final View topChildView = listView.getChildAt(0);
result = topChildView.getTop() == 0;
注:view的getTop()表示的是该View的顶部到父控件的左上角的垂直距离。当ListView的第一个child View的getTop()为零时,就表示ListView已经滚动到顶部了或已经在顶部不能在向上滑动了。1004人阅读
android(11)
一般判断ListView方向的方法大致是:ListView设置滑动监听器:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount{
但这样有一个问题,如果ListView只滑动一小段距离(不超过一个item的高度),firstVisibleItem是保持不变的啊!这样就判断不了是上滑还是下滑!所以这样做是有缺陷的!
但今天在使用一个控件时。偶然看了其源代码,发现了其中有对ListView方向更全面的判断方法,其实也很简单,代码如下:
import android.support.annotation.NonN
import android.view.V
import android.widget.AbsListV
import android.widget.AbsListView.OnScrollL
abstract class AbsListViewScrollDetector implements OnScrollListener {
private int mLastScrollY;
private int mPreviousFirstVisibleI
private AbsListView mListV
*滑动距离响应的临界值,这个值可根据需要自己指定
*只有只有滑动距离大于mScrollThreshold,才会响应滑动动作
private int mScrollT
AbsListViewScrollDetector() {}
abstract void onScrollUp();
abstract void onScrollDown();
public void onScrollStateChanged(AbsListView view, int scrollState) { }
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){
if(totalItemCount != 0) {
if(this.isSameRow(firstVisibleItem)) {
int newScrollY = this.getTopItemScrollY();
boolean isSignificantDelta = Math.abs(this.mLastScrollY - newScrollY) & this.mScrollT
if(isSignificantDelta) {
if(this.mLastScrollY & newScrollY) {
this.onScrollUp();
this.onScrollDown();
this.mLastScrollY = newScrollY;
if(firstVisibleItem & this.mPreviousFirstVisibleItem) {
this.onScrollUp();
this.onScrollDown();
this.mLastScrollY = this.getTopItemScrollY();
this.mPreviousFirstVisibleItem = firstVisibleI
public void setScrollThreshold(int scrollThreshold) {
this.mScrollThreshold = scrollT
public void setListView(@NonNull AbsListView listView) {
this.mListView = listV
private boolean isSameRow(int firstVisibleItem) {
return firstVisibleItem == this.mPreviousFirstVisibleI
private int getTopItemScrollY() {
if(this.mListView != null && this.mListView.getChildAt(0) != null) {
View topChild = this.mListView.getChildAt(0);
return topChild.getTop();
----------------------------我是分给线-----------------------------------
多看别人造的轮子还是很用的!
对了,这个我看的是这个开源库的:com.melnykov:floatingactionbutton:1.3.0。
Android studio 上应该能找到。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8688次
排名:千里之外
原创:14篇
评论:14条
(1)(2)(2)(1)(1)(2)(1)(1)(1)(2)(1)查看: 12748|回复: 6
如何判断listView向上滚动还是向下滚动?
该用户从未签到主题帖子e币
没有eoe的账号,级别还太低,出门如何吹牛逼?
才可以下载或查看,没有帐号?
当我们用手滑动listview时,如何判断listvew是向上滑动还是向下滑动?
有没有对应的API啊,我怎么找不到啊?
求高手解答;救命啊!
该用户从未签到主题帖子e币
& & public boolean onTouchEvent(MotionEvent ev) {
& && &&&final int y = (int) ev.getY();
& && &&&switch (action) {
& && &&&case MotionEvent.ACTION_DOWN: {
& && &&&& & & & ...
& && && && && & mMotionY =
& && && && && &
& & & & case MotionEvent.ACTION_MOVE: {
& & & & & & & & ...
& & & & & & & & deltaY = y - mMotionY;& &//delta的正负就表示往下或往上
& & & & & & & &
& & & & ...
你这方法不准确,时灵时不灵&
那就是要继承一个listview自己重写 onTouchEvent(MotionEvent ev) ?&
该用户从未签到主题帖子e币
kent 发表于
public boolean onTouchEvent(MotionEvent ev) {
& && &&&final int y = (int) ev.getY();
& && &&&swi ...
那就是要继承一个listview自己重写 onTouchEvent(MotionEvent ev) ?
该用户从未签到主题帖子e币
listview不是可以直接设置setTouchEvent的么,没必要重写一个。
建议看看这个文章
http://blog.csdn.net/hellogv/article/details/6615487
.........................晕&
该用户从未签到主题帖子e币
重写 onTouchEvent(MotionEvent ev)
该用户从未签到主题帖子e币
listview不是可以直接设置setTouchEvent的么,没必要重写一个。
建议看看这个文章
.........................晕
该用户从未签到主题帖子e币
public boolean onTouchEvent(MotionEvent ev) {
& && &&&final int y = (int) ev.getY();
& && &&&swi ...
你这方法不准确,时灵时不灵
推荐阅读热门话题
61887420384328283281261252226218208204201192715
1&小时前昨天&23:49昨天&22:43昨天&09:26前天&23:52前天&23:14前天&16:52前天&15:20前天&11:21前天&10:18前天&10:05前天&09:25前天&09:143&天前3&天前3&天前
Powered by本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 listview 滑动到底部 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信