編輯:關於Android編程
你以為頭像更換很容易?或許對於用戶來講,在微信上更換一個頭像只是點擊頭像,選擇拍照或相冊,裁剪返回而已。但是對於程序員來說,要實現其實也挺吃力的(小火柴花了一個下午整理~_~)。
正如用戶使用那樣,代碼的實現也是按照操作的順序而逐步展開。如下圖:

接下來主要來講解一下代碼:
1. 彈框選擇相冊或拍照
比較簡單的方式就是直接使用AlertDialog彈出選項供用戶進行選擇
public static void showImagePickDialog(final Activity activity){
String title = "選擇獲取圖片方式";
String[] items = new String[]{"拍照","相冊"};
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:
//選擇相冊
pickImageFromAlbum(activity);
break;
default:
break;
}
}
}).show();
}

2. 調用系統相機
在調用系統相機前,我們需要傳入自定義路徑的圖片Uri,指定拍照的圖片存放在這個Uri下,如果直接在返回時使用getData()獲取的是壓縮過的Bitmap數據
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. 打開系統相冊
直接調用系統相冊,再對返回數據進行操作
public static void pickImageFromAlbum(final Activity activity){
//隱式調用,可能出現多種選擇
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
activity.startActivityForResult(intent,REQUEST_CODE_FROM_ALBUM);
}
4. 對返回圖片Uri進行裁剪工作
對於拍照返回,直接對返回圖片進行裁剪即可;而對於選擇相冊返回,我們需要先將原圖片復制到我們自定義的目錄下(避免裁剪操作對原圖片的質量產生影響),然後對復制的圖片進行裁剪
@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); //復制圖片
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;
}
}
以上只給了部分代碼,需要完整代碼的同學可以到GitHub上下載:
https://github.com/ZhouCP/PhotoDemo
以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。
詳解SwipeListView框架實現微信\QQ滑動刪除效果
QQ或者微信出現過滑動,最近聯系人列表,可以刪去當前選中的聯系人,這個功能很棒。就是試著做了下。其實是使用了開源框架SwipeListView 。 SwipeL
簡單自定義安全鍵盤(只能輸入字母,數字,部分符號)
以前知道有個KeyboardView這個東西可以自定義鍵盤,但因為一直沒涉及到,所以沒研究過,今天看到工商銀行密碼輸入的鍵盤覺得挺好看,就來研究一下。先看一下工商銀行的圖
Android截包與反編譯
近期由於學習需要,嘗試了下截包與反編譯,發現對於簡單的反編譯與截包其實挺簡單的,而本文也主要介紹截包與反編譯工具的使用.截包截包的工具有很多,我這裡主要介紹簡單實用的fi
Unity3d 數字模型制作規范
本文提到的所有數字模型制作,全部是用3D MAX建立模型,即使是不同的驅動引擎,對模型的要求基本是相同的。當一個VR模型制作完成時,它所包含的基本內容包括場景尺寸、單位,