English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android에서 QQ 이미지 선택기를 모방

APP로서 사용할 때, 로컬 이미지를 선택해야 하는 경우, 첫 번째로 생각할 것은无疑가 시스템 앨범입니다. 하지만 안드로이드 스마트폰은 다양하며, 또한 스마트폰의 화소가 향상되면서 대형 이미지를 반환할 수 없는 등의 이상적인 요인으로 인해 호환 모델을 선택하는 것이 어려워졌습니다. 위챗, QQ도 자신의 APP에 이미지 선택 기능을 통합하고, 시스템이 제공하는 이미지 선택기로부터 포기했습니다. 여기서 QQ을 모방하여 로컬 이미지 선택기를 만들었습니다. PS: 이전에 "모방"을 "방어"라고 썼다는 이야기가 있었지만, 오늘은 특별히 주의하였습니다. 잘못되지 않길 바랍니다.

먼저 효과 이미지를 올려보겠습니다. 사진이 없으면 진실이 없기 때문입니다~~~

실현된 효과는 다음과 같습니다:

1.단일 선택: 로컬 이미지 선택 폴더로 이동하여 폴더를 선택하고, 해당 폴더 내의 모든 이미지로 이동한 후, 특정 이미지를 선택하고, 해당 이미지 주소 정보로 돌아갑니다

2.다중 선택: 이미지 폴더로 이동하여 폴더를 선택하고, 이미지를 선택하고, 오른쪽 상단의 작은 원형을 클릭하여 그림을 선택하고, 이미지의 다른 영역을 클릭하여 대형 이미지를 확인하고, 미리보기를 클릭하여 선택한 이미지를 확인할 수 있습니다. 폴더를 건너뛰어 이미지를 선택할 수 있습니다。

이 효과를 얻기 위해 몇 가지 일을 해야 합니다:

1.이 locall 파일의 모든 이미지가 들어 있는 폴더를 읽습니다:

여기서 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)) { //클릭한 항목이 이미 선택된 이미지라면, 지웁니다
mSelectlist.remove(imageBean);
subSelectPosition();
} //선택 목록에 없다면, 추가합니다
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를 통해 전달하려고 생각했지만, list.get(positon).contains를 통해 동일한 객체인지 비교했을 때 항상 다른 객체로 나타났습니다. 모두가 확인해 보세요. 따라서 여기서는 선택된 이미지와 폴더에 있는 모든 이미지를 저장하는 모니터링자 클래스를 정의했습니다. 또한, 대형 이미지를 확인할 때, 선택了一张 또는 선택을 취소한 이미지가 있을 때, 모니터링자를 통해 업데이트를 알림으로써 업데이트를 수행할 수 있습니다.

/**
* 이미지 선택이 변경되었다고 알립니다.
*/
public void updateImageSelectChanged () {
setChanged();
notifyObservers(imgSelectObj);
}

그렇다면, 위와 같은 내용이 있으면 우리의 이미지 선택기 사용할 수 있습니다:

단일 선택 시, 필요한 위치에서 호출합니다:

/*단일 선택, 파라미터는 context, 호출*/
FolderListActivity.startSelectSingleImgActivity(this, 2);
다중 선택 시:
/*파라미터는 context, 호출 코드, 전달된 이미지 리스트, 선택 가능한 최대 개수입니다*/
FolderListActivity.startFolderListActivity(this, 1, null, 9);

마지막으로 Activity의 onActivityResult에서 반환된 이미지 데이터를 수신합니다:

List<ImageFolderBean> list = (List<ImageFolderBean>) data.getSerializableExtra("list");

소스 코드 다운로드 주소:

https://github.com/JarekWang/photoselect

이상은 편집자가 여러분께 안내한 안드로이드 고립 QQ 이미지 선택器的 전체 설명입니다. 여러분의 도움이 되길 바랍니다!

성명: 본 내용은 인터넷에서 가져왔으며, 원작자에게 속합니다. 인터넷 사용자가 자발적으로 기여하고 업로드한 내용이며, 웹사이트는 소유권을 가지지 않으며, 인공적인 편집을하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반 내용을 발견하시면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 (보내실 때, #을 @으로 변경하십시오) 신고를 남겨 주시고, 관련 증거를 제공하시면, 사이트가 즉시 위반 내용을 삭제할 것입니다.

당신이 좋아할 것 같은 것