图片选择器
private int getFieldValue(Object object, String fieldName) {
int val = 0;
try {
Field field = ImageView.class.getDeclaredField(fieldName);
//todo 研究一下这个不加的话会出现什么情况
field.setAccessible(true);
int fieldVal = field.getInt(object);
if (fieldVal > 0 && fieldVal < Integer.MAX_VALUE) {
val = fieldVal;
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return val;
}DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
width = displayMetrics.widthPixels;
height = displayMetrics.heightPixels;Semaphore poolThreadHandlerSemaphore = new Semaphore(0);
//当要获取信号量时,如果没有可用的信号量则阻塞
poolThreadHandlerSemaphore.acquire();
//释放信号量
poolThreadHandlerSemaphore.release();-
获得ContentResolver contentResolver = MainActivity.this.getContentResolver();
-
获得游标
Cursor cursor = contentResolver.query(imageUri, null, MediaStore.Images.Media.MIME_TYPE + "=?" + " or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED); 其中imageUri 为 Uri imageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; while (cursor.moveToNext()) { //通过游标cursor获取数据库中某一列中的数据 String path = cursor.getString( cursor.getColumnIndex(MediaStore.Images.Media.DATA)); }
-
关闭游标 cursor.close();
List<String> imgList;
imgList = Arrays.asList(maxDir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String filename) {
if (filename.endsWith(".jpg")
|| filename.endsWith(".JPG")
|| filename.endsWith(".PNG")
|| filename.endsWith(".png")
|| filename.endsWith("jpeg")
|| filename.endsWith(".JPEG"))
return true;
return false;
}
}));
- 文件的list方法可以根据Filter来匹配符合规则图片
- Arrays.asList 可将数组转化为List
思路是在getView方法中记录有收藏标签的position(只要是能唯一表示Item的标示即可),在return convertView之前 判断这个item是否被记录,如果被记录,就显示标签,否则隐藏标签