AndroidStaggeredGrid是一个支持多列并且每一行的item大小不一,交错排列的GridView。官网的说明是:An Android staggered grid view which supports multiple columns with rows of varying sizes。也不知道我翻译的正不正确,看看图你就知道它实现的是什么效果了!





AndroidStaggeredGrid 支持Android 2.3及2.3以上版本,如果需要可以修改源码以支持更低Android SDK版本。


AndroidStaggeredGrid 地址:https://github.com/etsy/AndroidStaggeredGrid



AndroidStaggeredGrid 使用

1、首先从官网下载Zip文件,下载地址:https://github.com/etsy/AndroidStaggeredGrid,下载完成解压缩后如下所示:



2、导入library和sample到eclipse中

导入的时候不是很方便,这里我直接把我导入成功后的项目打成Zip文件,以供下载,见文章最后附件部分


3、AndroidStaggeredGrid用法

在布局文件中引用,如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.etsy.android.grid.StaggeredGridView        android:id="@+id/grid_view"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:item_margin="8dp"        app:column_count_portrait="2"        app:column_count_landscape="3" /></FrameLayout>


AndroidStaggeredGrid 用法跟GridView大体差不多,如下:

mGridView = (StaggeredGridView) findViewById(R.id.grid_view);        LayoutInflater layoutInflater = getLayoutInflater();        View header = layoutInflater.inflate(R.layout.list_item_header_footer, null);        View footer = layoutInflater.inflate(R.layout.list_item_header_footer, null);        TextView txtHeaderTitle = (TextView) header.findViewById(R.id.txt_title);        TextView txtFooterTitle =  (TextView) footer.findViewById(R.id.txt_title);        txtHeaderTitle.setText("THE HEADER!");        txtFooterTitle.setText("THE FOOTER!");        mGridView.addHeaderView(header);        mGridView.addFooterView(footer);        mAdapter = new SampleAdapter(this, R.id.txt_line1);        // do we have saved data?        if (savedInstanceState != null) {            mData = savedInstanceState.getStringArrayList(SAVED_DATA_KEY);        }        if (mData == null) {            mData = SampleData.generateSampleData();        }        for (String data : mData) {            mAdapter.add(data);        }        mGridView.setAdapter(mAdapter);        mGridView.setOnScrollListener(this);


我们可以通过addHeaderView和addFooterView给它添加头部和尾部,还可以通过setOnScrollListener给它注册滚动监听。


通过给它注册OnScrollListener,我们就可以实现滚动翻页的效果了,代码如下:

 @Override    public void onScrollStateChanged(final AbsListView view, final int scrollState) {        Log.d(TAG, "onScrollStateChanged:" + scrollState);    }    @Override    public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {        Log.d(TAG, "onScroll firstVisibleItem:" + firstVisibleItem +                            " visibleItemCount:" + visibleItemCount +                            " totalItemCount:" + totalItemCount);        // our handling        if (!mHasRequestedMore) {            int lastInScreen = firstVisibleItem + visibleItemCount;            if (lastInScreen >= totalItemCount) {                Log.e(TAG, "onScroll lastInScreen - so load more");                mHasRequestedMore = true;                onLoadMoreItems();            }        }    }    private void onLoadMoreItems() {        final ArrayList<String> sampleData = SampleData.generateSampleData();        for (String data : sampleData) {            mAdapter.add(data);        }        // stash all the data in our backing store        mData.addAll(sampleData);        // notify the adapter that we can update now        mAdapter.notifyDataSetChanged();        mHasRequestedMore = false;    }










官方示例Sample下载:http://download.csdn.net/detail/fx_sky/6766057




更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android实现带动画效果的可点击展开TextView
  6. 如何查看Android的ANR(无响应)异常
  7. cocos2dx--cocos2dx3.1.1android环境编译
  8. android 程序執行logcat 指令並保存到文件裏
  9. 连续多版本android发布器

随机推荐

  1. Android(安卓)播放SD卡上指定的一首歌(初
  2. Android中的异常处理 CrashHandler
  3. android 被强制横屏,Activity重启问题解决
  4. 【React Native开发】React Native For A
  5. ImageButton和Button区别
  6. Android(java)学习笔记94:关于广播接收者的
  7. No resource identifier found for attri
  8. Android的Service总结
  9. Android(安卓)命名规范 (提高代码可以读性
  10. Programming 3D games on Android with I