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了,这块就不讲了,其实都差不多。有需要的朋友可以下载源码看。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值