Android實現類似換QQ頭像功能(圖片裁剪)
現在幾乎所有的App都有用戶登錄模塊,需要設置用戶頭像,而關于用戶頭像部分無疑也是比較頭疼的,目前大部分應用的頭像部分會有兩種方式:一種是利用系統的裁剪功能去獲取用戶頭像,一種就是獲取到圖片或者照片的地址后自定義頭像裁剪界面。而我這里提供了一種利用系統的裁剪功能來獲取頭像的寫法,當然我寫的這個只是實現一個簡單地功能,比較簡單。如果大家有比較好的寫法可以和我交流下。
沒圖說個JB,先看看效果:



首先是打開系統相冊,實現代碼:
Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CON TENT_URI, "image/*"); startActivityForResult(intent,2);
通過onActivityResult方法得到返回的intent數據:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 2: if (layout_pop != null) {
layout_pop.dismiss();
}
Uri uri = null; if (data == null) { return;
} if (resultCode == RESULT_OK) { if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "SD不可用",1).show(); return;
} uri = data.getData();
startImageAction(uri, 200, 200,3, true);
} else {
Toast.makeText(this, "照片獲取失敗",1).show();
} break; case 3: if (layout_pop != null) {
layout_pop.dismiss();
} if (data == null) {
return;
} else {
saveCropAvator(data);
} break; default: break;
}
} 圖像裁剪實現代碼:
private void startImageAction(Uri uri, int outputX, int outputY, int requestCode, boolean isCrop) {
Intent intent = null; if (isCrop) {
intent = new Intent("com.android.camera.action.CROP");
} else {
intent = new Intent(Intent.ACTION_GET_CONTENT, null);
}
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", true);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection startActivityForResult(intent, requestCode);
} 對頭像裁剪過后,還需要將圖片變為圓角,處理方法為:
/*
將圖片變為圓角
@param bitmap
原Bitmap圖片
@param pixels
圖片圓角的弧度(單位:像素(px))
@return 帶有圓角的圖片(Bitmap 類型) */
public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint); return output;
}</pre>
最后保存圖片:
/**
* 保存裁剪的頭像
*
* @param data */
private void saveCropAvator(Intent data) {
Bundle extras = data.getExtras(); if (extras != null) {
Bitmap bitmap = extras.getParcelable("data");
Log.i("life", "avatar - bitmap = " + bitmap); if (bitmap != null) {
bitmap = toRoundCorner(bitmap, 10);//調用圓角處理方法 headImageView.setImageBitmap(bitmap); if (bitmap != null && bitmap.isRecycled()) {
bitmap.recycle();
}
}
}
}
原文地址:http://www.cnblogs.com/evilfei/p/3923495.html
本文由用戶 pphe 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!