java图片裁剪类似qq头像_Android实现类似换QQ头像功能(图片裁剪)

现在几乎所有的App都有用户登录模块,需要设置用户头像,而关于用户头像部分无疑也是比较头疼的,目前大部分应用的头像部分会有两种方式:一种是利用系统的裁剪功能去获取用户头像,一种就是获取到图片或者照片的地址后自定义头像裁剪界面。而我这里提供了一种利用系统的裁剪功能来获取头像的写法,当然我写的这个只是实现一个简单地功能,比较简单。如果大家有比较好的写法可以和我交流下。

没图说个JB,先看看效果:

a559d7a5c95e67ddc5d808489895a5da.png

9c7d9ff4cc5cfcfe0d2e4d42e8e3c2c8.png

bd7c6fb3f1e7a6d4fecd2d5692bba10f.png

1df9389e19b0aabae3dfc303f3ebbce1.png

首先是打开系统相册,实现代码:

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;

}

最后保存图片:

/**

* 保存裁剪的头像

*

* @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();

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值