判断android中列表是否在顶部
来源:互联网 发布:小额贷款那个软件最好 编辑:程序博客网 时间:2024/06/05 10:59
前言
需求来自需要定制一个通用的下拉刷新的控件,但是不可避免的需要知道如果列表还可不可以上滑,所以自然而然的想到的了系统的一个下拉刷新的控件! SwipeRefreshLayout,对,就是这个控件,如果还没有用过的人可以去搜索使用一下,是一个十分方便的控件,但是如果公司要定制的效果那就没办法了,所以要向楼主一样需要自定义个。那么废话也不多说了,就直接教大家如何知道任何情况下一个控件是否还可以向上滚动!
首先我们知道事件机制是一锤子的买卖,所以SwipeRefreshLayout作为一个下拉刷新的控件,它肯定是在onInterceptTouchEvent中进行判断是否拦截事件的,那么我们就去找到相应的代码!
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { ensureTarget(); final int action = MotionEventCompat.getActionMasked(ev); if (mReturningToStart && action == MotionEvent.ACTION_DOWN) { mReturningToStart = false; } if (!isEnabled() || mReturningToStart || canChildScrollUp() || mRefreshing || mNestedScrollInProgress) { // Fail fast if we're not in a state where a swipe is possible return false; } //.........以下省略 }
我省略了很多代码,但是这段是没有省略的,我们可以很清楚的看到有一个方法canChildScrollUp(),所以那还用说嘛,直接点进去啊
/** * @return Whether it is possible for the child view of this layout to * scroll up. Override this if the child view is a custom view. */ public boolean canChildScrollUp() { if (android.os.Build.VERSION.SDK_INT < 14) { if (mTarget instanceof AbsListView) { final AbsListView absListView = (AbsListView) mTarget; return absListView.getChildCount() > 0 && (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0) .getTop() < absListView.getPaddingTop()); } else { return ViewCompat.canScrollVertically(mTarget, -1) || mTarget.getScrollY() > 0; } } else { return ViewCompat.canScrollVertically(mTarget, -1); } }
于是乎发现了这段源代码,我就开心的笑了,这里注释比较简单,这个方法就是我们想要的代码,android实现了!
但是里面使用一个成员变量mTarget,不用考虑也知道这个就是他需要判断的控件,那么我们为了代码的通用性,博主肯定把它拿出来改改呀!
/** * 判断这个View是不是可以向上滑动 * * @param mTarget * @return */ public boolean canChildScrollUp(View mTarget) { if (android.os.Build.VERSION.SDK_INT < 14) { if (mTarget instanceof AbsListView) { final AbsListView absListView = (AbsListView) mTarget; return absListView.getChildCount() > 0 && (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0) .getTop() < absListView.getPaddingTop()); } else { return ViewCompat.canScrollVertically(mTarget, -1) || mTarget.getScrollY() > 0; } } else { return ViewCompat.canScrollVertically(mTarget, -1); } }
一不小心就改造成了通用代码啦,妈妈再也不用担心如何判断列表类的控件是否还可以向上滚动啦!
总结
有时候需要多看看系统源码,不仅有利于自身水平的提高,还可以发现很多android工程师平时解决问题的思路和技巧
2 0
- 判断android中列表是否在顶部
- Android-判断某个网络是否在网络列表中
- 【Android】判断listview是否滑动到顶部
- VC代码判断网站是否在兼容性视图列表中
- SQL判断成员是否在部门列表中
- android中 判断service是否在运行
- Android中判断listview是否滑动到顶部和底部方法
- jQuery判断滚动条是否在顶部、底部。
- 如何判断一个activity是否在最顶部显示
- 在Android中,如何判断当前是否在桌面上
- Android Recyclerview判断是否已经到底部或者顶部
- Android 判断一个视图是否滚动到顶部
- android正确判断 ListView 是否滚动到顶部或者底部
- Android--- 应用程序设置是否出现在近期任务列表中
- Android--- 应用程序设置是否出现在近期任务列表中
- Python 判断一个字符串是否在列表中任何一个字符串中出现过
- Android中判断是否有声音在播放
- Android中判断是否有声音在播放
- ubuntu 安装搜狗输入法(解决部分ubuntu安装完没有键盘选择栏)
- memcached 小记
- web.xml中的contextConfigLocation在spring中的作用
- Counting Bits
- 图结构练习——最小生成树
- 判断android中列表是否在顶部
- 移动端js触摸事件
- 把云之讯音视频Demo从Eclipse转到AndroidStudio上
- OC语法基础:使用storyboard和xib的区别
- aapt
- 自定义事件
- 二叉树中和为某一值的路径
- 基础篇--StringBuffer、StringBuilder、String
- My First Blog