91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么實現一個頭像選擇功能

發布時間:2021-06-28 18:06:02 來源:億速云 閱讀:233 作者:Leah 欄目:移動開發

這期內容當中小編將會給大家帶來有關Android中怎么實現一個頭像選擇功能,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

封裝圖片選擇和圖片裁剪的工具類

/**
  * 選擇圖片(從相冊或相機)
  * @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>
...

上述就是小編為大家分享的Android中怎么實現一個頭像選擇功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遵化市| 石河子市| 定南县| 扬中市| 中牟县| 抚顺市| 肃宁县| 洞头县| 旬阳县| 田东县| 诏安县| 阳春市| 白沙| 高清| 天台县| 珠海市| 剑河县| 疏附县| 民勤县| 彭山县| 禄丰县| 武定县| 永德县| 会同县| 阳江市| 嘉荫县| 报价| 囊谦县| 墨玉县| 平昌县| 贡嘎县| 济南市| 珲春市| 延边| 乐昌市| 灵丘县| 大埔县| 天津市| 永新县| 从江县| 吉木乃县|