Android實(shí)現(xiàn)用戶(hù)頭像更換操作
你以為頭像更換很容易?或許對(duì)于用戶(hù)來(lái)講,在微信上更換一個(gè)頭像只是點(diǎn)擊頭像,選擇拍照或相冊(cè),裁剪返回而已。但是對(duì)于程序員來(lái)說(shuō),要實(shí)現(xiàn)其實(shí)也挺吃力的(小火柴花了一個(gè)下午整理~_~)。
正如用戶(hù)使用那樣,代碼的實(shí)現(xiàn)也是按照操作的順序而逐步展開(kāi)。如下圖:

接下來(lái)主要來(lái)講解一下代碼:
1. 彈框選擇相冊(cè)或拍照
比較簡(jiǎn)單的方式就是直接使用AlertDialog彈出選項(xiàng)供用戶(hù)進(jìn)行選擇
public static void showImagePickDialog(final Activity activity){
String title = "選擇獲取圖片方式";
String[] items = new String[]{"拍照","相冊(cè)"};
new AlertDialog.Builder(activity)
.setTitle(title)
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
switch (which){
case 0:
//選擇拍照
pickImageFromCamera(activity);
break;
case 1:
//選擇相冊(cè)
pickImageFromAlbum(activity);
break;
default:
break;
}
}
}).show();
}

2. 調(diào)用系統(tǒng)相機(jī)
在調(diào)用系統(tǒng)相機(jī)前,我們需要傳入自定義路徑的圖片Uri,指定拍照的圖片存放在這個(gè)Uri下,如果直接在返回時(shí)使用getData()獲取的是壓縮過(guò)的Bitmap數(shù)據(jù)
public static void pickImageFromCamera(final Activity activity){
//獲得指定路徑的Uri
imageUriFromCamera = getImageUri();
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUriFromCamera);
activity.startActivityForResult(intent,REQUEST_CODE_FROM_CAMERA);
}
3. 打開(kāi)系統(tǒng)相冊(cè)
直接調(diào)用系統(tǒng)相冊(cè),再對(duì)返回?cái)?shù)據(jù)進(jìn)行操作
public static void pickImageFromAlbum(final Activity activity){
//隱式調(diào)用,可能出現(xiàn)多種選擇
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
activity.startActivityForResult(intent,REQUEST_CODE_FROM_ALBUM);
}
4. 對(duì)返回圖片Uri進(jìn)行裁剪工作
對(duì)于拍照返回,直接對(duì)返回圖片進(jìn)行裁剪即可;而對(duì)于選擇相冊(cè)返回,我們需要先將原圖片復(fù)制到我們自定義的目錄下(避免裁剪操作對(duì)原圖片的質(zhì)量產(chǎn)生影響),然后對(duì)復(fù)制的圖片進(jìn)行裁剪
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case ImageUtils.REQUEST_CODE_FROM_ALBUM: {
if (resultCode == RESULT_CANCELED) { //取消操作
return;
}
Uri imageUri = data.getData();
ImageUtils.copyImageUri(this,imageUri); //復(fù)制圖片
ImageUtils.cropImageUri(this, ImageUtils.getCurrentUri(), 200, 200); //裁剪圖片
break;
}
case ImageUtils.REQUEST_CODE_FROM_CAMERA: {
if (resultCode == RESULT_CANCELED) { //取消操作
ImageUtils.deleteImageUri(this, ImageUtils.getCurrentUri()); //刪除Uri
}
ImageUtils.cropImageUri(this, ImageUtils.getCurrentUri(), 200, 200); //裁剪圖片
break;
}
case ImageUtils.REQUEST_CODE_CROP: {
if (resultCode == RESULT_CANCELED) { //取消操作
return;
}
Uri imageUri = ImageUtils.getCurrentUri();
if (imageUri != null) {
imageView.setImageURI(imageUri); //顯示圖片
}
break;
}
default:
break;
}
}
以上只給了部分代碼,需要完整代碼的同學(xué)可以到GitHub上下載:
https://github.com/ZhouCP/PhotoDemo
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。
- Android實(shí)現(xiàn)本地上傳圖片并設(shè)置為圓形頭像
- Android使用CircleImageView實(shí)現(xiàn)圓形頭像的方法
- Android根據(jù)電話(huà)號(hào)碼獲得聯(lián)系人頭像實(shí)例代碼
- Android實(shí)現(xiàn)從本地圖庫(kù)/相機(jī)拍照后裁剪圖片并設(shè)置頭像
- Android手機(jī)拍照或選取圖庫(kù)圖片作為頭像
- Android一行代碼實(shí)現(xiàn)圓形頭像
- Android實(shí)現(xiàn)調(diào)用系統(tǒng)圖庫(kù)與相機(jī)設(shè)置頭像并保存在本地及服務(wù)器
- Android實(shí)現(xiàn)個(gè)人資料頁(yè)面頭像背景模糊顯示包(狀態(tài)欄)
- Android頭像上傳功能的實(shí)現(xiàn)代碼(獲取頭像加剪切)
- Android實(shí)現(xiàn)IM多人員組合的群組頭像
相關(guān)文章
詳解Flutter 調(diào)用 Android Native 的方法
這篇文章主要介紹了詳解Flutter 調(diào)用 Android Native 的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)
這篇文章主要為大家介紹了Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)運(yùn)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Input系統(tǒng)之InputReader處理合成事件詳解
這篇文章主要為大家介紹了Input系統(tǒng)之InputReader處理合成事件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
配置android開(kāi)發(fā)環(huán)境時(shí)出現(xiàn)eclipse獲取不到ADT的解決方法
這篇文章主要介紹了配置android開(kāi)發(fā)環(huán)境時(shí)出現(xiàn)eclipse獲取不到ADT的解決方法,涉及針對(duì)開(kāi)發(fā)環(huán)境hosts文件域名映射的修改及eclipse配置的修改技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
FFmpeg?Principle學(xué)習(xí)new_video_stream添加視頻輸出流
這篇文章主要為大家介紹了FFmpeg?Principle學(xué)習(xí)new_video_stream添加視頻輸出流示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android中CountDownTimer倒計(jì)時(shí)器用法實(shí)例
這篇文章主要介紹了Android中CountDownTimer倒計(jì)時(shí)器用法,以實(shí)例形式分析了Android中CountDownTimer類(lèi)的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
解決Android popupWindow設(shè)置背景透明度無(wú)效的問(wèn)題
這篇文章主要介紹了解決Android popupWindow設(shè)置背景透明度無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Android recyclerview實(shí)現(xiàn)拖拽排序和側(cè)滑刪除
這篇文章主要為大家詳細(xì)介紹了Android recyclerview實(shí)現(xiàn)拖拽排序和側(cè)滑刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android列表對(duì)話(huà)框用法實(shí)例分析
這篇文章主要介紹了Android列表對(duì)話(huà)框用法,實(shí)例分析了Android實(shí)現(xiàn)列表對(duì)話(huà)框的布局、設(shè)置及功能等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09

