近期打算做一个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);方法也可以达到我所要的效果。