Android 하 이 퍼 포 먼 스 QQ 이미지 선택 기
먼저 위의 효과 도,진실 이 없 구나~~
실현 효 과 는 대략 이렇다.
1.단일 선택:로 컬 그림 으로 이동 하여 폴 더 를 선택 하고 폴 더 를 선택 한 후 이 폴 더 아래 에 있 는 모든 그림 에 들 어가 어떤 그림 을 선택 한 후 그림 주소 정 보 를 되 돌려 줍 니 다.
2.다 중 선택:그림 폴 더 로 이동 하여 폴 더 하 나 를 선택 하고,그림 을 선택 하고,오른쪽 상단 에 있 는 작은 원 을 클릭 하고,이 그림 을 선택 하고,그림 의 다른 영역 을 클릭 하고,큰 그림 을 보고,미리 보 기 를 클릭 하고,선 택 된 그림 을 보고,폴 더 를 넘 어 그림 을 선택 할 수 있 습 니 다.
이 효 과 를 얻 기 위해 서 는 몇 가지 일 을 해 야 한다.
1.로 컬 에 있 는 모든 그림 폴 더 읽 기:
여기 서 ContentResolver 로 미디어 파일 을 읽 습 니 다.
String[] columns = {MediaStore.Images.Media._ID, MediaStore.Images.Thumbnails.DATA, MediaStore.Images.Media.DATA, MediaStore.Images.Media.BUCKET_ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME, "COUNT(1) AS count"};
String selection = "0==0) GROUP BY (" + MediaStore.Images.Media.BUCKET_ID;
String sortOrder = MediaStore.Images.Media.DATE_MODIFIED;
Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, selection, null, sortOrder);
이것 은 간단 한 SQL 조회 문 입 니 다.폴 더 에 따라 그룹 을 나 누고 폴 더 의 그림 수 를 되 돌려 줍 니 다.2.지정 한 폴 더 아래 의 모든 그림 읽 기:
어떤 디 렉 터 리 를 선택 할 때 이 디 렉 터 리 아래 의 모든 그림 을 읽 어야 합 니 다.
String[] columns = new String[]{MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
/* -- */
String whereclause = MediaStore.Images.ImageColumns.DATA + " like'" + folderPath + "/%'";
Log.i("queryGalleryPicture", "galleryPath:" + folderPath);
Cursor corsor = c.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, whereclause, null, null);
이 검색 어 는 파일 이름 에 따라 걸 러 집 니 다.그림 경로 에 폴 더 경 로 를 포함 하면 이 폴 더 의 그림 입 니 다.3.UI 상호작용
먼저 그림 이 포 함 된 모든 폴 더 를 보 여줄 때 그림 이 있 는 폴 더 를 비동기 로 불 러 와 읽 기 에 성공 한 후 목록 을 보 여 줍 니 다.여기 서 사용 하 는 RecyclerView 는 목록 정 보 를 보 여 줍 니 다.특정한 디 렉 터 리 를 클릭 할 때 디 렉 터 리 에 있 는 그림 을 읽 고 그림 전시 페이지 에서 현재 클릭 한 그림 이 선택 목록 에 있 는 지 여 부 를 판단 할 때마다'삭제'할 경우 주의해 야 합 니 다.없다여기 그림 로드 는 오픈 소스 프레임 워 크 ImageLoader 를 사 용 했 습 니 다.
if (mSelectlist.contains(imageBean)) { // item ,
mSelectlist.remove(imageBean);
subSelectPosition();
} else { // ,
if (mSelectlist.size() >= maxCount) {
Toast.makeText(mContext, mContext.getResources().getString(R.string.publish_select_photo_max, maxCount), Toast.LENGTH_SHORT).show();
return;
}
mSelectlist.add(imageBean);
imageBean.selectPosition = mSelectlist.size();
}
//
notifyItemChanged(position);
그림 한 장 을 삭제 하지 않 았 습 니 다.그림 의 번 호 는 변 경 된 다음 변경 사항 에 대해 UI 를 업데이트 하 라 고 알 립 니 다.서로 다른 Activity 가 이동 할 때 그림 목록 List 를 전달 해 야 하기 때문에 list 에 서 는 사용자 정의 실체 류 입 니 다.처음에 intent 로 전달 하 는 것 을 고려 했 지만 intent 로 전달 한 후에 list.get(positon).contains 를 통 해 같은 대상 인지 아 닌 지 를 비교 할 때 항상 다른 대상 이 므 로 확인 할 수 있 습 니 다.따라서 선택 한 그림 과 폴 더 에 있 는 모든 그림 을 저장 하고 큰 그림 을 볼 때 한 장 을 선택 하거나 취소 하면 관찰자 알림 을 통 해 업데이트 하면 됩 니 다.
/**
*
*/
public void updateImageSelectChanged () {
setChanged();
notifyObservers(imgSelectObj);
}
자,이상 이 있 으 면 우리 의 그림 선택 기 를 사용 할 수 있 습 니 다.단일 선택 시 필요 한 곳 에서 호출:
/* , context, */
FolderListActivity.startSelectSingleImgActivity(this, 2);
:
/* context, code, List, */
FolderListActivity.startFolderListActivity(this, 1, null, 9);
마지막 으로 Activity 의 onActivity Result 에서 되 돌아 오 는 그림 데 이 터 를 받 습 니 다:
List<ImageFolderBean> list = (List<ImageFolderBean>) data.getSerializableExtra("list");
원본 다운로드 주소:https://github.com/JarekWang/photoselect
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 모방 QQ 이미지 선택 기의 모든 서술 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.