最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 項目實戰(zhàn)之頭像選擇功能

 更新時間:2018年01月26日 14:43:30   作者:陳明明  
這篇文章主要介紹了Android 項目實戰(zhàn)頭像選擇功能實戰(zhàn),需要的朋友可以參考下

一、圖片選擇

1.1 目標

1.實現(xiàn)如圖所示功能:能夠出現(xiàn)相冊和相機選項

2.能夠?qū)x擇的圖片進行裁剪

 

1.2 功能實現(xiàn)

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是設(shè)置在開啟的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 輸出圖片寬高,切忌不要再改動下列數(shù)字,會卡死
  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è)置為不返回數(shù)據(jù)
  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;
   }
  }
 }

處理反饋結(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.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>
...

總結(jié)

以上所述是小編給大家介紹的Android 項目實戰(zhàn)之頭像選擇功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 超過百萬的StackOverflow Flutter 20大問題(推薦)

    超過百萬的StackOverflow Flutter 20大問題(推薦)

    這篇文章主要介紹了超過百萬的StackOverflow Flutter 問題,有的問題在stackoverflow上有幾十萬的閱讀量,說明很多人都遇到了這些問題,把這些問題整理分享給大家需要的朋友可以參考下
    2020-04-04
  • Flutter替換字符串中的html標簽

    Flutter替換字符串中的html標簽

    這篇文章主要為大家介紹了Flutter替換字符串中的html標簽實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • Android自定義圓角ImageView

    Android自定義圓角ImageView

    這篇文章主要介紹了Android自定義圓角ImageView的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • AlertDialog點擊按鈕不消失的實現(xiàn)方法

    AlertDialog點擊按鈕不消失的實現(xiàn)方法

    我有一個文本輸入對話框,當我點擊對話框上的“是”按鈕,它會驗證輸入,然后關(guān)閉對話框,但是,如果輸入錯誤,我想停留在同一個對話框中。怎么實現(xiàn)此功能呢?下面通過本文給大家分享下
    2017-01-01
  • Android Broadcast 和 BroadcastReceiver的權(quán)限限制方式

    Android Broadcast 和 BroadcastReceiver的權(quán)限限制方式

    這篇文章主要介紹了Android Broadcast 和 BroadcastReceiver的權(quán)限限制方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android實現(xiàn)Activity之間通信的方法

    Android實現(xiàn)Activity之間通信的方法

    這篇文章主要介紹了Android實現(xiàn)Activity之間通信的方法,涉及Android中Activity實現(xiàn)數(shù)據(jù)的發(fā)送及接收相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android 5.0 開機橫屏修改方法

    Android 5.0 開機橫屏修改方法

    這篇文章主要介紹了 Android 5.0 開機橫屏修改方法,大概可以分為三部分,具體修改方法,大家參考下本文
    2017-01-01
  • 使用ViewPager實現(xiàn)android軟件使用向?qū)Чδ軐崿F(xiàn)步驟

    使用ViewPager實現(xiàn)android軟件使用向?qū)Чδ軐崿F(xiàn)步驟

    現(xiàn)在的大部分android軟件,都是使用說明,就是第一次使用該軟件時,會出現(xiàn)向?qū)?,可以左右滑動,然后就進入應(yīng)用的主界面了,下面我們就實現(xiàn)這個功能
    2013-11-11
  • Android中異步類AsyncTask用法總結(jié)

    Android中異步類AsyncTask用法總結(jié)

    這篇文章主要介紹了Android中異步類AsyncTask用法,分析總結(jié)了Async Task類的功能、特點及相關(guān)的使用技巧與注意事項,需要的朋友可以參考下
    2016-01-01
  • Android中EditText如何去除邊框添加下劃線

    Android中EditText如何去除邊框添加下劃線

    這篇文章主要介紹了Android中EditText如何去除邊框添加下劃線的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評論

湖口县| 曲麻莱县| 吴川市| 鸡泽县| 永宁县| 上杭县| 阳原县| 桐柏县| 九龙城区| 彭水| 肥东县| 龙海市| 西乌珠穆沁旗| 兴隆县| 永靖县| 桦甸市| 吕梁市| 孟连| 大化| 越西县| 辉县市| 鄂托克旗| 明溪县| 芷江| 蕉岭县| 广汉市| 庄河市| 贡觉县| 梁平县| 定安县| 清徐县| 清丰县| 岢岚县| 资兴市| 陕西省| 广德县| 阿荣旗| 手游| 甘泉县| 阿拉善左旗| 灌阳县|