Scrollview+ListView冲突解决
2019独角兽企业重金招聘Python工程师标准>>>
最近做一个功能,要使用Scrollview+Listview+ ListView,,经过找demo,找到了一个例子,自己也实现了一个例子来理解实现过程。先分享下,望大家指点、
思路 :
现在又scrollview,一个上面的listView 我们叫做topListView, 一个在下面的GridView 我们叫做bottomListView, 我让topListView重写onMeasure()方法,让topListView完全显示,不再具有滚动功能。
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);
}
这样topListview和ScrollView冲突问题得以解决。
bottomListView和Scrollview和冲突我们通过以下解决:我们给tottomListView设置一个固定高度,这个高度往往是ScrollView显示的高度,这样解决了显示的问题。
post(new Runnable() {@Overridepublic void run() {int height = mScrollView.getHeight();int height2 = topLayout.getHeight();Log.i("TEST", " post ---> height : " + height);Log.i("TEST", " post ---> height2 : " + height2);Log.i("TEST", " post ---> getHeight : " + rootView.getHeight());recommendGrid.getLayoutParams().height = height;recommendGrid.setSwitchHeight(height2);recommendGrid.invalidate();mScrollView.invalidate();}
}, 200);
其次是滑动的冲突,冲突的关键是listView和Scrollview放在一起时listVIew接收不到屏幕的touch事件,解决它。
我们的解决方法是: 当Scrollview向上滚动时当滚动到topListView和bottom的分界点,即bottomListView滚动到屏幕顶端,我们就主动将touch叫给bottomListView,所以上面代码同时设置了topLIstView的高度。
recommendGrid.setSwitchHeight(height2);
然后判断
mScrollView.setOnMyScrollListener(new PullScrollView.OnMyScrollListener() {@Overridepublic void onScroll(int l, int t, int oldl, int oldt) {if (recommendGrid.isOnTop()) {recommendGrid.setParentIdle(true);} else {recommendGrid.setParentIdle(false);}}
});
其中
recommendGrid.setParentIdle();
用来设置父scrollView是否接收touch事件,true :不接收,即传给子元素ListView,false : 相反,内部方法是:
public void setParentIdle(boolean flag) {if (parentView != null) {parentView.requestDisallowInterceptTouchEvent(flag);}
}
下滑时,需要将touch事件控制权再交给ScrollView,这时需要判断,当bottom的第一个元素完全展示出来时才可以将控制权移交,
private boolean isFirstItemOnTop() {boolean flag = getFirstVisiblePosition() == 0 && getChildCount() > 0 && getChildAt(0).getTop() >= 0;Log.d("TEST", " isFirstItemOnTop ---> getFirstVisiblePosition : " + (getFirstVisiblePosition() == 0));if (getChildCount() > 0) {Log.d("TEST", " isFirstItemOnTop ---> getChildAt(0).getTop() : " + getChildAt(0).getTop());}return flag;
}
ok,基本思路在这里,具体代码整理后在上传,谢谢。
PS : 由于topListView是完全展示,所以getView()不会再被重用,且会重复执行很多次,所以不建议用来实现每个itemView特别复杂的功能,其实上面完全可以将topListView替换掉,用任一ViewGroup来实现其他功能,方法还是一样的。
转载于:https://my.oschina.net/u/559847/blog/480309
Scrollview+ListView冲突解决相关推荐
- ScrollView和ListView冲突解决
直接上代码来的直接点吧-- package com.zhuo.scrollview_listview; import java.util.ArrayList; import android.ap ...
- Android开发之解决ListView和ScrollView滑动冲突的方法
我们看下图: 不管怎么滑动都无法显示listview的剩余数据,只能显示一条,我们看下布局,ScrollView里面嵌套ListView <?xml version="1.0" ...
- 【Android 手势冲突】Colin带你彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏(附demo哦)
在新一期的需求中,产品要求我们做出和美团某个页面类似的功能,即一个页面包含在scrollView中,上面一个部分放置一些常用的广告banner.宫格tab等,下面放置一个RecyclerView用于展 ...
- Android滑动冲突解决方法
Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...
- Android进阶必备:滑动冲突解决与事件分发机制(附视频讲解)这篇看完还不懂请寄刀片
1.前言 Android学习一段时间,需求做多了必然会遇到滑动冲突问题,比如在一个ScrollView中要嵌套一个地图View,这时候触摸移动地图或者放大缩小地图就会变得不太准确甚至没有反应,这就是遇 ...
- android viewpager嵌套侧滑删除listview冲突问题
场景: viewpager嵌套侧滑删除的listview(如SwipeMenuListView),当在滑动在SwipeMenuListView的viewpager页时,两者滑动冲突 解决:自定义li ...
- mysql 主从,主主,主主复制时的主键冲突解决
原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...
- Android Studio中架包打包和依赖冲突解决
一.为什么使用aar打包,而不是jar 随着Android Studio的使用越来越广泛,使用aar打包这种方式也越来越可行实际. jar打包只打源代码,像资源文件不会打包,而aar恰恰是jar打包的 ...
- Android Studio androidx 包冲突解决方法
Android Studio androidx 包冲突解决方法 参考文章: (1)Android Studio androidx 包冲突解决方法 (2)https://www.cnblogs.com/ ...
最新文章
- 【nacos】本机电脑、服务器上如何安装配置nacos
- 开发路上踩过的坑要一个个填起来————持续更新······(7月30日)
- Hyperledger Besu(1)“系统框架”
- Modelsim仿真流程
- 使用gdb调试多进程和多线程
- 原生js实现简单JSONP
- MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔
- Quartz定时任务调度机制解析(CronTirgger、SimpleTrigger )
- 16 张图教你如何从 0 到 1 构建一个稳定、高性能的 Redis 集群!
- 美国团购巨头是怎样衰落的
- 当Ext.js中xtype: 'checkboxfield'时,没勾选则向后台发送的数据没有字段的解决方法...
- pyqtSignal信号和槽
- 阿里云服务器配置端口安全组完整教程大全
- 字幕文件srt处理之pysrt
- rdms系统_什么是关系数据库管理系统(RDMS)?
- 【虚幻4/UE4】学习笔记01——软件介绍、安装及界面
- ora00054 资源正忙
- Google财经香港版上线,香港路演
- Shell命令-文件及目录操作之pwd、rm
- 面对未来,我在黑夜中努力奔跑.