`
xindrace
  • 浏览: 93739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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


  • 大小: 115.3 KB
  • 大小: 74 KB
1
2
分享到:
评论
2 楼 messigoogle 2012-11-27  
我说您这个也是跟eoe上的差不多吧,加载的Assert中的图片,不能加载网络图片吧
1 楼 gundumw100 2012-10-26  
LazyScrollView是偶写的。欢迎使用。呵呵。
http://gundumw100.iteye.com/blog/1164066

相关推荐

Global site tag (gtag.js) - Google Analytics