横向瀑布流android,waterfall

waterfall

1. 简介

瀑布流(waterfall)是一种元素定宽不定高、横向看去参差不齐的多列布局。随着页面向下滚动,这种布局会不断加载数据块并附加至当前的尾部。它提供错落有致、琳琅满目的视觉效果,特别适用于展现多彩纷呈的图片集。

2. 为Android应用搭建瀑布流布局

在Android中应用这种布局不是一件很轻松的事,不过这个waterfall框架已经把大部分工作帮你做好了,你只需学会如何使用它。

2.1 引用瀑布流组件

在你的项目里引用waterfall工程库,并在你需要的布局位置添加瀑布流组件(瀑布流默认为2列,具体怎么设置请参看注意事项)。

android:id="@+id/waterfall"

android:layout_width="match_parent"

android:layout_height="match_parent">

Waterfall mWaterfall = (Waterfall) findViewById(R.id.waterfall);

2.2 实现你的Adapter

推荐你在Adapter中使用一款开源框架:Universal-Image-Loader。它封装了令人头疼的图片加载功能,并提供options满足开发者大部分需求,譬如:使用缓存、使用本地缓存、设置位图格式等。

2.3 添加监听器

给瀑布流添加懒加载监听,规定当页面滑至最底部时要做些什么(通常是加载一批新数据附加至当前的尾部)、当新数据附加完毕时要做些什么。

mWaterfall.addLazyLoadListener(new LazyLoadListener() {

@Override

public void onLazyLoadReady() {

// TODO your code here

}

@Override

public void onLazyLoadFinish() {

// TODO your code here

}

});

3. 注意事项

3.1 元素的排列顺序

在任意时刻,当你向waterfall中添加一个元素的时候,waterfall总是会把这个元素附加到当前所有列中最短的那一列之后,其意图很明显:尽最大努力使各列元素总高度保持近似一致。

3.2 自定义属性

waterfall允许你在xml中自定义2类属性:列数(column_count)、元素间距(item_margin)。

xmlns:tools="http://schemas.android.com/tools"

xmlns:waterfall="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/waterfall"

android:layout_width="match_parent"

android:layout_height="match_parent"

waterfall:column_count="3"

waterfall:column_count_portrait="3"

waterfall:column_count_landscape="4"

waterfall:item_margin="8dp"/>

3.3 header & footer

你可以根据需要实现瀑布流的header和footer。

View footer = getLayoutInflater().inflate(R.layout.waterfall_item_footer, null);

mWaterfall.addFooterView(footer);

通常,你的footer会有2种状态:如果你的懒加载需要等待一定的时间,你的footer会处于“正在加载”状态;当加载完毕后,这个footer会切换为隐藏状态(直到下一次懒加载准备就绪)。

如何实现这种带状态的footer呢?除了通过实现上述LazyLoadListener的监听器方法之外,waterfall提供了一种更简单的方法:给你的footer实现ILazyLoadFooter接口,规定footer如何表示特定的2种状态,因为waterfall已经为你做好了触发的时机,所以你只需给你的footer实现这个接口就可以了。

public interface ILazyLoadFooter {

/**

* show footer when a lazy-load is ready

*/

public void show();

/**

* hide footer when the lazy-load is finished

*/

public void hide();

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值