Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显

               

转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/20481185),请尊重他人的辛勤劳动成果,谢谢!

大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSDN上面更新我的博客,欢迎大家关注一下,今天这篇文章主要的是介绍下开源库StickyGridHeaders的使用,StickyGridHeaders是一个自定义GridView带sections和headers的Android库,sections就是GridView item之间的分隔,headers就是固定在GridView顶部的标题,类似一些Android手机联系人的效果,StickyGridHeaders的介绍在https://github.com/TonicArtos/StickyGridHeaders,与此对应也有一个相同效果的自定义ListView带sections和headers的开源库https://github.com/emilsjolander/StickyListHeaders,大家有兴趣的可以去看下,我这里介绍的是StickyGridHeaders的使用,我在Android应用方面看到使用StickyGridHeaders的不是很多,而是在Iphone上看到相册采用的是这种效果,于是我就使用StickyGridHeaders来仿照Iphone按照日期分隔显示本地图片

我们先新建一个Android项目StickyHeaderGridView,去https://github.com/TonicArtos/StickyGridHeaders下载开源库,为了方便浏览源码我直接将源码拷到我的工程中了


com.tonicartos.widget.stickygridheaders这个包就是我放StickyGridHeaders开源库的源码,com.example.stickyheadergridview这个包是我实现此功能的代码,类看起来还蛮多的,下面我就一一来介绍了

GridItem用来封装StickyGridHeadersGridView 每个Item的数据,里面有本地图片的路径,图片加入手机系统的时间和headerId

package com.example.stickyheadergridview;/** * @blog http://blog.csdn.net/xiaanming *  * @author xiaanming * */public class GridItem /**  * 图片的路径  */ private String path; /**  * 图片加入手机中的时间,只取了年月日  */ private String time; /**  * 每个Item对应的HeaderId  */ private int headerId; public GridItem(String path, String time) {  super();  this.path = path;  this.time = time; }  public String getPath() {  return path; } public void setPath(String path) {  this.path = path; } public String getTime() {  return time; } public void setTime(String time) {  this.time = time; } public int getHeaderId() {  return headerId; } public void setHeaderId(int headerId) {  this.headerId = headerId; } }
 图片的路径path和图片加入的时间time 我们直接可以通过ContentProvider获取,但是headerId需要我们根据逻辑来生成。

package com.example.stickyheadergridview;import android.content.ContentResolver;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.provider.MediaStore;/** * 图片扫描器 *  * @author xiaanming * */public class ImageScanner private Context mContext;  public ImageScanner(Context context){  this.mContext = context; }  /**  * 利用ContentProvider扫描手机中的图片,将扫描的Cursor回调到ScanCompleteCallBack  * 接口的scanComplete方法中,此方法在运行在子线程中  */ public void scanImages(final ScanCompleteCallBack callback) {  final Handler mHandler = new Handler() {   @Override   public void handleMessage(Message msg) {    super.handleMessage(msg);    callback.scanComplete((Cursor)msg.obj);   }  };    new Thread(new Runnable() {   @Override   public void run() {    //先发送广播扫描下整个sd卡    mContext.sendBroadcast(new Intent(                    Intent.ACTION_MEDIA_MOUNTED,                    Uri.parse("file://" + Environment.getExternalStorageDirectory())));        Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;    ContentResolver mContentResolver = mContext.getContentResolver();        Cursor mCursor = mContentResolver.query(mImageUri, null, null, null, MediaStore.Images.Media.DATE_ADDED);        //利用Handler通知调用线程    Message msg = mHandler.obtainMessage();    msg.obj = mCursor;    mHandler.sendMessage(msg);   }  }).start(); }  /**  * 扫描完成之后的回调接口  *  */ public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值