NineGridView icon indicating copy to clipboard operation
NineGridView copied to clipboard

你好,在NineGridView中的onLayout方法会无限掉用。

Open leguang opened this issue 7 years ago • 15 comments

你好,在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也不会无限打印了。 您看具体原因是出现在哪儿?

leguang avatar Apr 25 '17 10:04 leguang

我再Recyclerview中用glide 加载图片内存一会就飙升到快100M了,我觉得glide框架没有问题,还是这个控件有问题

jsonhu avatar May 04 '17 03:05 jsonhu

@leguang 我也遇到了这个问题, 但是我用你提供的方式, 发现, 如果是在list中, 会出现数据图片错乱的现象, 如果不是在list中, 比如在详情页里使用了这个框架, 刷新几次就会出现不进行布局的现象, 导致空白. 请问这种情况如何解决呢?

SherlockGougou avatar Jul 11 '17 07:07 SherlockGougou

@16fangougou 请问你解决了吗

WangStormstout avatar Jul 17 '17 06:07 WangStormstout

@16fangougou @LinkSy 解决了?

largeCabbage avatar Jul 24 '17 08:07 largeCabbage

我把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.

WangStormstout avatar Aug 15 '17 08:08 WangStormstout

ImgInfo对象不要放在for循环里,不过还是内存抖动严重

keaitao0321 avatar Oct 13 '17 08:10 keaitao0321

http://www.jianshu.com/p/547b24cfad76

我曾经为我朋友圈写的控件,里面有分析过这个库,原因应该是addView导致的,这里分享一下我的文章,并不是为了photocontents做推广(事实上没有打算推广。。。),仅作为技术交流用。。。

razerdp avatar Dec 05 '17 07:12 razerdp

@leguang 我也遇到了这个问题, 但是我用你提供的方式, 发现, 如果是在list中, 会出现数据图片错乱的现象, 如果不是在list中, 比如在详情页里使用了这个框架, 刷新几次就会出现不进行布局的现象, 导致空白. 请问这种情况如何解决呢? 大兄弟解决了问题了吗?

fmliqi avatar Dec 18 '18 12:12 fmliqi

@yungelee 抱歉,我已经没用这个了,自己用RecyclerView写了一个。

leguang avatar Dec 19 '18 07:12 leguang

@yungelee 抱歉,我已经没用这个了,自己用RecyclerView写了一个。 唉,技术不到家啊,我改了一天,还是没办法修改控件过度重布局造成图片无限加载的问题,只能另想他法了。我这需求容器的子元素的大小不定相同,用recylerview估计不好实现吧。

fmliqi avatar Dec 19 '18 15:12 fmliqi

@yungelee 说说的你的需求,大家讨论一下,给你出出主意。

leguang avatar Dec 20 '18 01:12 leguang

@yungelee 说说的你的需求,大家讨论一下,给你出出主意。

也没有特别的需求,就是和该库的三个,五个,6个元素显示不同大小的正方形一样,有的占据1.5倍的宽高,有的是2倍宽高。我也是参照该库的核心代码layoutchildren去布局不同的尺寸位置的。

fmliqi avatar Dec 20 '18 01:12 fmliqi

@yungelee 1.5倍宽,2倍宽,这个BaseRecyclerViewAdapterHelper库有啊。

leguang avatar Dec 20 '18 02:12 leguang

那高呢?他不支持高吧。再者在Recylcerview里面嵌套recyclerview又会带来新的问题,我参考了别人自定义控件的思路去绘制和布局一个新的viewgroup; , 虽然star不多,但是方法比较对路,性能ok.ps:希望后面遇到这个麻烦的人可以参考这个方案。

fmliqi avatar Dec 24 '18 02:12 fmliqi

地址

fmliqi avatar Dec 24 '18 02:12 fmliqi