android瀑布流

今天研究了一下瀑布流,来说一下我实现它的方法。

看一下效果图:



 

基本的思路是重写了 ScrollView,让它包含一个LinearLayout,然后你要实现几列的就在里面添加几个LinearLayout,然后在循环在那几个LinearLayout里添加图片(也可以是别的view等)。

想看看重写ScrollView的LazyScrollView类

LazyScrollView类中定义了滑动的接口

/**
	 * 定义接口
	 * 
	 * @author lilongchun_hz
	 * 
	 */
	public interface OnScrollListener {
		void onBottom();

		void onTop();

		void onScroller();
	}

	private OnScrollListener onScrollListener;

	public void setOnScrollListener(OnScrollListener onScrollListener) {
		this.onScrollListener = onScrollListener;
	}

 然后在类中实现onTouchListener,onTouchListener中实现滑动时,调用OnScrollListener

// 屏幕touch点击事件
	OnTouchListener onTouchListener = new OnTouchListener() {

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				System.out.println("down");
				break;
			case MotionEvent.ACTION_UP:
				System.out.println("up");
				if(view != null && onScrollListener !=null){
					handler.sendMessageDelayed(handler.obtainMessage(1), 200);
				}
				break;
			default:
				break;
			}
			return false;
		}
	};
    private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case 1:
				// 滑动到底部
				if (view.getMeasuredHeight() <= (getScrollY() + getMeasuredHeight())) {
					if (onScrollListener != null) {
						onScrollListener.onBottom();
					}
				} else if (getScrollY() == 0) { // 滑动到顶部
					if (onScrollListener != null) {
						onScrollListener.onTop();
					}
				} else {// 滑动中
					if (onScrollListener != null) {
						onScrollListener.onScroller();
					}
				}
				break;

			default:
				break;
			}
		}
	};

 然后就是在MainActivity中添加LinearLayout

for (int i = 0; i < COLUMN_COUNT; i++) { // 生成三列的LinearLayout
			LinearLayout itemLayout = new LinearLayout(this);
			LinearLayout.LayoutParams itemParam = new LinearLayout.LayoutParams(
					itemWidth, LayoutParams.WRAP_CONTENT);
			itemLayout.setPadding(2, 2, 2, 2);
			itemLayout.setOrientation(LinearLayout.VERTICAL);
			itemLayout.setLayoutParams(itemParam);

			waterfall_items.add(itemLayout);
			waterfall_container.addView(itemLayout);
		}

 其余的就是添加ImageView了,这块就不讲了,其实都差不多。有需要的朋友可以下载源码看。


猜你喜欢

转载自xindrace.iteye.com/blog/1705803