這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Android中怎么實(shí)現(xiàn)一個(gè)頭像選擇功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有衛(wèi)輝免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
封裝圖片選擇和圖片裁剪的工具類
/** * 選擇圖片(從相冊(cè)或相機(jī)) * @param uri 相機(jī)存儲(chǔ)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 裁剪后存儲(chǔ)位置 * @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/*"); // 下面這個(gè)crop=true是設(shè)置在開(kāi)啟的Intent中設(shè)置顯示的VIEW可裁剪 intent.putExtra("crop", "true"); intent.putExtra("scale", true); // 去黑邊 intent.putExtra("scaleUpIfNeeded", true); // 去黑邊 // aspectX aspectY 裁剪框?qū)捀弑壤? intent.putExtra("aspectX", width); // 輸出是X方向的比例 intent.putExtra("aspectY", height); // outputX outputY 輸出圖片寬高,切忌不要再改動(dòng)下列數(shù)字,會(huì)卡死 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); // 設(shè)置為不返回?cái)?shù)據(jù) return intent; }
b.ivAvatar.setOnClickListener { mTakePhotoFile = File(getPicPath() + File.separator + System.currentTimeMillis() + ".jpeg") val uri = Uri.fromFile(mTakePhotoFile) startActivityForResult(IntentUtils.getPhotoSelectIntent( uri), TAKE_PHOTO_REQ) }
圖片裁剪所需的Uri類似: content:// 的形式,因此需要封裝一個(gè)獲取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; } } }
處理反饋結(jié)果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(resultCode != -1) { return } when (requestCode) { TAKE_PHOTO_REQ -> { // 處理圖片選擇結(jié)果 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 -> { // 處理圖片裁剪結(jié)果 } } }
1. res/xml/provider_paths.xml路徑自行更換
2. manifests配置包名自行更換
...... ...
上述就是小編為大家分享的Android中怎么實(shí)現(xiàn)一個(gè)頭像選擇功能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。