Android 프로젝트 실전 프로필 사진 선택 기능
1.1 목표
1.그림 과 같은 기능 구현:앨범 과 카메라 옵션 이 나타 날 수 있 음
2.선택 한 그림 을 재단 할 수 있 습 니 다.
1.2 기능 실현
1.2.1 Intent 도구 클래스 패키지
패키지 그림 선택 과 그림 재단 도구 클래스
/**
* ( )
* @param uri uri
* @return
*/
public static Intent getPhotoSelectIntent(Uri uri){
Intent take = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
take.addCategory(Intent.CATEGORY_DEFAULT);
take.putExtra(MediaStore.EXTRA_OUTPUT, uri);
Intent pics = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent chose= Intent.createChooser(pics," ");
chose.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[]{take});
return chose;
}
/**
*
* @param inputUri
* @param outputUri
* @param width
* @param height
* @return
*/
public static Intent getImageCropIntent(Uri inputUri, Uri outputUri, int width, int height) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(inputUri, "image/*");
// crop=true Intent VIEW
intent.putExtra("crop", "true");
intent.putExtra("scale", true); //
intent.putExtra("scaleUpIfNeeded", true); //
// aspectX aspectY
intent.putExtra("aspectX", width); // X
intent.putExtra("aspectY", height);
// outputX outputY , ,
intent.putExtra("outputX", width); // X
intent.putExtra("outputY", height);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
intent.putExtra("return-data", false); //
return intent;
}
1.2.2 클릭 사진 선택 이벤트 추가
b.ivAvatar.setOnClickListener {
mTakePhotoFile = File(getPicPath() + File.separator + System.currentTimeMillis() + ".jpeg")
val uri = Uri.fromFile(mTakePhotoFile)
startActivityForResult(IntentUtils.getPhotoSelectIntent( uri), TAKE_PHOTO_REQ)
}
1.2.3 이미지 선택 과 재단 피드백 처리그림 재단 에 필요 한 Uri 는 content:/형식 과 유사 하기 때문에 content Uri 를 가 져 오 는 도구 클래스 를 패키지 해 야 합 니 다.
public static Uri getContentUri(Context context, File file) {
String filePath = file.getAbsolutePath();
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Images.Media._ID },
MediaStore.Images.Media.DATA + "=? ",
new String[] { filePath }, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor
.getColumnIndex(MediaStore.MediaColumns._ID));
Uri baseUri = Uri.parse("content://media/external/images/media");
return Uri.withAppendedPath(baseUri, "" + id);
} else {
if (file.exists()) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, filePath);
return context.getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} else {
return null;
}
}
}
처리 피드백 결과
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode != -1) {
return
}
when (requestCode) {
TAKE_PHOTO_REQ -> {
//
mCutPhotoFile = File(getPicPath() + File.separator + "avatar_" + System.currentTimeMillis() + "jpeg")
val cutUri = Uri.fromFile(mCutPhotoFile)
if (data != null){
startActivityForResult(IntentUtils.getImageCropIntent(data.data, cutUri, 200, 200), CUT_PHOTO_REQ)
} else {
val uri = UriUtils.getContentUri(applicationContext, mTakePhotoFile)
startActivityForResult(IntentUtils.getImageCropIntent(uri, cutUri, 200, 200), CUT_PHOTO_REQ)
}
}
CUT_PHOTO_REQ -> {
//
}
}
}
1.2.4 Android 7.0 적합1. res/xml/provider_paths.xml 경로 자체 변경
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path path="Android/data/com/example/sunmoon/images" name="sdcard_files" />
<external-files-path path="Android/data/com/example/sunmoon/images" name="camera_has_sdcard"/>
<files-path path="Android/data/com/example/sunmoon/other" name="camera_no_sdcard"/>
<external-path path="Android/data/com/example/sunmoon" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>
2.manifests 설정 패키지 이름 변경
...
<application>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.sunmoon.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
...
</application>
...
총결산위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 프로젝트 실전 프로필 사진 선택 기능 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.