废话不多说,直接上代码:
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = RecycleViewGlideActivity.this.getContentResolver();
Cursor cursor = cr.query(uri,null,MediaStore.Images.Media.MIME_TYPE+"=? or "
+MediaStore.Images.Media.MIME_TYPE+"=?",new String[]{"image/jpeg","image/png"},
MediaStore.Images.Media.DATE_MODIFIED);
HashSet hashSet = new HashSet();
while (cursor.moveToNext()){
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
File parentFile = new File(path).getParentFile();
if(parentFile == null){
continue;
}
String dirPath = parentFile.getAbsolutePath();
FolderBean folderBean = null;
if (hashSet.contains(dirPath)) {
continue;
}else{
hashSet.add(dirPath);
folderBean = new FolderBean();
folderBean.setFirstImgPath(path);
folderBean.setDir(dirPath);
}
if(parentFile.list() == null){
continue;
}
int picCount = parentFile.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if(name.endsWith(".jpg")
||name.endsWith(".jpeg")
||name.endsWith(".png")
||name.endsWith(".JPG")
||name.endsWith(".JPEG")
||name.endsWith(".PNG"))
return true;
return false;
}
}).length;
folderBean.setCount(picCount);
folderBeans.add(folderBean);
if (picCount>nMaxCount){
nMaxCount = picCount;
mCurrentDir = parentFile;
}
}
cursor.close();
以上为获取本地Sd卡目录的关键代码,可以获取手机里面所有的图片文件,包括jpg,png,jpeg等图片格式。
扫码到图片后可以通过recyclerView动态的显示出来:
recyclerView.setAdapter(new MyRecycleViewAdapter(imgs,RecycleViewGlideActivity.this));
recyclerView.setLayoutManager(new GridLayoutManager(RecycleViewGlideActivity.this,4));
recyclerView.setItemAnimator(new DefaultItemAnimator());
class MyRecycleViewAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private List<String> imgs;
private Context context;
public MyRecycleViewAdapter(List<String> imgs,Context context) {
this.imgs = imgs;
this.context = context;
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.recycle_glide_item,parent,false);
RecyclerView.ViewHolder holder = new RecyclerView.ViewHolder(view) {
@Override
public String toString() {
return super.toString();
}
};
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
View view = holder.itemView;
final ImageView iv = view.findViewById(R.id.iv_glide_re);
final String url = mCurrentDir.getAbsoluteFile()+"/"+imgs.get(position);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// iv.setAlpha(0.5f);
iv.setColorFilter(Color.parseColor("#77000000"));
PicShowDialogFragment.newInstance(url).show(getFragmentManager(),"2222");
}
});
Glide.with(context).load(url).into(iv);
}
@Override
public int getItemCount() {
return imgs.size();
}
}