NineGridView
NineGridView copied to clipboard
你好,在NineGridView中的onLayout方法会无限掉用。
你好,在NineGridView中的onLayout方法会无限掉用。
我将NineGridView作为RecyclerView的Item,然后显示3张图片的时候,在第一次加载的时候可能没问题,但是从屏幕外滑进来后就会不停加载图片,最后跟踪定位到onLayout方法,会无限调用。现在你的源码如下:
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (mImageInfo == null) return; int childrenCount = mImageInfo.size(); for (int i = 0; i < childrenCount; i++) { ImageView childrenView = (ImageView) getChildAt(i); if (mImageLoader != null) { mImageLoader.onDisplayImage(getContext(), childrenView, mImageInfo.get(i).thumbnailUrl); } int rowNum = i / columnCount; int columnNum = i % columnCount; int left = (gridWidth + gridSpacing) * columnNum + getPaddingLeft(); int top = (gridHeight + gridSpacing) * rowNum + getPaddingTop(); int right = left + gridWidth; int bottom = top + gridHeight; childrenView.layout(left, top, right, bottom); } }
我看到你没有判断是否位置发生改变就开始布局。
现在我的解决方案是写一个类,继承NineGridView,在onLayout方法里做一个判断,代码如下:
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { ALog.e("1111111111" + changed); if (changed) { super.onLayout(changed, l, t, r, b); } }
最后解决问题了,log也不会无限打印了。
您看具体原因是出现在哪儿?
我再Recyclerview中用glide 加载图片内存一会就飙升到快100M了,我觉得glide框架没有问题,还是这个控件有问题
@leguang 我也遇到了这个问题, 但是我用你提供的方式, 发现, 如果是在list中, 会出现数据图片错乱的现象, 如果不是在list中, 比如在详情页里使用了这个框架, 刷新几次就会出现不进行布局的现象, 导致空白. 请问这种情况如何解决呢?
@16fangougou 请问你解决了吗
@16fangougou @LinkSy 解决了?
我把Picasso改成了glide
在 2017-07-24 16:03:07,"largeCabbage" [email protected] 写道:
@16fangougou@LinkSy 解决了?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
ImgInfo对象不要放在for循环里,不过还是内存抖动严重
http://www.jianshu.com/p/547b24cfad76
我曾经为我朋友圈写的控件,里面有分析过这个库,原因应该是addView导致的,这里分享一下我的文章,并不是为了photocontents做推广(事实上没有打算推广。。。),仅作为技术交流用。。。
@leguang 我也遇到了这个问题, 但是我用你提供的方式, 发现, 如果是在list中, 会出现数据图片错乱的现象, 如果不是在list中, 比如在详情页里使用了这个框架, 刷新几次就会出现不进行布局的现象, 导致空白. 请问这种情况如何解决呢? 大兄弟解决了问题了吗?
@yungelee 抱歉,我已经没用这个了,自己用RecyclerView写了一个。
@yungelee 抱歉,我已经没用这个了,自己用RecyclerView写了一个。 唉,技术不到家啊,我改了一天,还是没办法修改控件过度重布局造成图片无限加载的问题,只能另想他法了。我这需求容器的子元素的大小不定相同,用recylerview估计不好实现吧。
@yungelee 说说的你的需求,大家讨论一下,给你出出主意。
@yungelee 说说的你的需求,大家讨论一下,给你出出主意。
也没有特别的需求,就是和该库的三个,五个,6个元素显示不同大小的正方形一样,有的占据1.5倍的宽高,有的是2倍宽高。我也是参照该库的核心代码layoutchildren去布局不同的尺寸位置的。
@yungelee 1.5倍宽,2倍宽,这个BaseRecyclerViewAdapterHelper库有啊。