Android瀑布流,类似于蘑菇街和迷尚 应用里的排列

我在gitHub里开了一个项目,方便大家获取代码
https://github.com/dodola/android_waterfall


已使用应用:
雨滴阅读应用使用了这个效果,非常感谢。希望大家支持 http://www.eoeandroid.com/thread-165784-1-1.html


前段时间看到有人在提问区里提问这个效果,就照着做了一个。



2012年2月28日更新了一下,主要是添加了事件操作,不会出现OOM异常,不过性能上损失了不少,还需要改进。


QQ截图20120224011526.png


QQ截图20120224011547.png

下载附件:
旧版:



2012年3月1日 更新
1.采用Thread 来获取图片,解决了AsyncTask加载过多会造成 java.util.concurrent.RejectedExecutionException 造成的问题。


2.修改分页加载方式。


3.经过测试1000张图片没有出现OOM问题,1000以上未测试


下一步修改:滚动流畅度修改,图片排列顺序修改



2012年4月15日 更新


更新内容:
1.重写了图片内存回收算法,试过在1万张可以流畅的滑动,不出现内存溢出情况


2.修改了图片排列顺序的方法,修改了图片某列过长而某列过短的情况


下载附件:
2012年4月15日 waterfall4_15.zip(6.49 MB, 下载次数: 12029)


4月16日:更新删除图片部分(直接贴代码,免得大家再下载一次)
public void deleteItems(FlowView v) {
int rowIndex = v.getRowIndex();
int columnIndex = v.getColumnIndex();

int height = v.getHeight();
waterfall_items.get(columnIndex).removeView(v);
this.pin_mark[columnIndex].remove(rowIndex);
for (int i = rowIndex; i < pin_mark[columnIndex].size(); i++) {
this.pin_mark[columnIndex].put(i,
this.pin_mark[columnIndex].get(i + 1) - height);
this.pin_mark[columnIndex].remove(i + 1);
((FlowView) this.waterfall_items.get(columnIndex).getChildAt(i))
.setRowIndex(i);
}

lineIndex[columnIndex]--;
column_height[columnIndex] -= height;
if (this.bottomIndex[columnIndex] > this.lineIndex[columnIndex]) {
bottomIndex[columnIndex]--;
}
}

你可能感兴趣的:(android)