android 瀑布流简单例子

main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/arc_hf_search_result"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/arc_hf_search_item"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout>

</ScrollView>

ArcHFSearchResult.java

public class ArcHFSearchResult extends Activity {
    protected static final String TAG = "ArcHFSearchResult";
    private ScrollView svResult;
    private LinearLayout llItem;
    private String[] arrayStr;
    private int pageCount = 0;
    private int resultCount = 10000;
    private int eachCount = 3000;
    private View view;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        svResult = (ScrollView) findViewById(R.id.arc_hf_search_result);
        llItem = (LinearLayout) findViewById(R.id.arc_hf_search_item);
        svResult.setOnTouchListener(svListener);
        view = svResult.getChildAt(0);
        // 将要显示的10000条数据
        arrayStr = new String[resultCount];
        for (int i = 0; i < resultCount; i++) {
            arrayStr[i] = i + "";
        }
        // 第一次添加数据,每次添加3000条。
        AddResult();
    }

    class svTouchListener implements OnTouchListener {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_UP:
                // 如果触发监听事件,并且有内容,并且ScrollView已经拉到底部,加载一次数据
                if (svListener != null
                        && view != null
                        && view.getMeasuredHeight() - 20 <= svResult
                                .getScrollY() + svResult.getHeight()) {
                    AddResult();
                }
                break;
            default:
                break;
            }
            return false;
        }
    }

    svTouchListener svListener = new svTouchListener();

    /**
     * 添加结果
     */
    protected void AddResult() {
        if (eachCount * pageCount < resultCount) {
            for (int i = 0; i < eachCount; i++) {
                int k = i + eachCount * pageCount;
                if (k >= resultCount)
                    break;
                TextView tv = new TextView(this);
                tv.setText("hello world" + arrayStr[k]);
                llItem.addView(tv);
            }
            pageCount++;
        }
    }
}
posted @ 2012-06-01 13:19  oldfeel  阅读(3988)  评论(0编辑  收藏  举报