近期打算做一个GIF应用。具有拍摄GIF、从本地照片制作GIF、查看GIF图片等功能。
做第二个功能时遇到一个问题:File类的listFiles方法获得的File数组默认是按照修改时间从小到大的顺序排序。即最早拍摄的照片显示最前。我要的效果是最近拍摄的照片显示在最前。
主要代码如下:
private void initData(){
mList = new ArrayList<File>();
String url = Environment.getExternalStorageDirectory().toString()+"/DCIM/Camera";
File albumdir = new File(url);
File[] imgfile = albumdir.listFiles(filefiter);
int len = imgfile.length;
for(int i=0;i<len;i++){
mList.add(imgfile[i]);
}
Collections.sort(mList, new FileComparator());
}
private FileFilter filefiter = new FileFilter(){
@Override
public boolean accept(File f) {
String tmp = f.getName().toLowerCase();
if(tmp.endsWith(".png")||tmp.endsWith(".jpg")
||tmp.endsWith(".jpeg")){
return true;
}
return false;
}
};
private class FileComparator implements Comparator<File>{
@Override
public int compare(File lhs, File rhs) {
if(lhs.lastModified()<rhs.lastModified()){
return 1;//最后修改的照片在前
}else{
return -1;
}
}
}
除了使用Comparator接口之外,使用Collections.reverse(mList);方法也可以达到我所要的效果。