package com.emop.client.widget;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import com.emop.client.widget.item.FlowView;
public class WaterFallUtils {
private WaterFallView fallView;
private int scrollHeight;
public int getScrollHeight(ScrollView scroll) {
return scroll.getMeasuredHeight();
}
public WaterFallUtils(WaterFallView waterFallView) {
this.fallView = waterFallView;
}
public void autoReload(int l, int t, int oldl, int oldt) {
scrollHeight = fallView.getMeasuredHeight();
WaterFallView.Debug("scroll_height:" + t + ", view height:" + scrollHeight);
if (t > oldt) {// 向下滚动
scrollDown(l, t, oldl, oldt);
} else {// 向上滚动
scrolldUp(l, t, oldl, oldt);
}
}
private void scrolldUp(int l, int t, int oldl, int oldt) {
if (t > 2 * scrollHeight) {// 超过两屏幕后
for (int k = 0; k < fallView.columnCount; k++) {
LinearLayout localLinearLayout = fallView.waterfall_items
.get(k);
if (fallView.pin_mark[k].get(fallView.bottomIndex[k]) > t + 3
* scrollHeight) {
WaterFallView.Debug("recycle,k:" + fallView.bottomIndex[k]);
((FlowView) localLinearLayout
.getChildAt(fallView.bottomIndex[k])).recycle();
fallView.bottomIndex[k]--;
}
if (fallView.pin_mark[k].get(Math.max(fallView.topIndex[k] - 1,
0)) >= t - 2 * scrollHeight) {
((FlowView) localLinearLayout.getChildAt(Math.max(-1
+ fallView.topIndex[k], 0))).Reload();
fallView.topIndex[k] = Math
.max(fallView.topIndex[k] - 1, 0);
}
}
}
}
//
private void scrollDown(int l, int t, int oldl, int oldt) {
if (t > 2 * scrollHeight) {// 超过两屏幕后
for (int k = 0; k < fallView.columnCount; k++) {
LinearLayout localLinearLayout = fallView.waterfall_items
.get(k);
int rowIndex = Math.min(fallView.bottomIndex[k] + 1,
fallView.lineIndex[k]);
if (fallView.pin_mark[k].get(rowIndex) <= t
+ 3 * scrollHeight) {// 最底部的图片位置小于当前t+3*屏幕高度
((FlowView) localLinearLayout.getChildAt(rowIndex)).Reload();
fallView.bottomIndex[k] = rowIndex;
WaterFallView.Debug("relaod:" + k + ",k:" + fallView.bottomIndex[k]);
}
WaterFallView.Debug("headIndex:" + fallView.topIndex[k]
+ " footIndex:" + fallView.bottomIndex[k]
+ " headHeight:"
+ fallView.pin_mark[k].get(fallView.topIndex[k]));
if (fallView.pin_mark[k].get(fallView.topIndex[k]) < t - 2
* scrollHeight) {// 未回收图片的最高位置<t-两倍屏幕高度
WaterFallView.Debug("recycle,k:" + k + " headindex:"
+ fallView.topIndex[k]);
int i1 = fallView.topIndex[k];
fallView.topIndex[k]++;
((FlowView) localLinearLayout.getChildAt(i1)).recycle();
}
}
}
}
}