100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java图片裁剪类似qq头像_Android实现类似换QQ头像功能(图片裁剪)

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

时间:2019-12-18 06:24:40

相关推荐

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

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

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

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

Intentintent=newIntent(Intent.ACTION_PICK,null);

intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");

startActivityForResult(intent,2);

通过onActivityResult方法得到返回的intent数据:

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

//TODOAuto-generatedmethodstub

super.onActivityResult(requestCode,resultCode,data);

switch(requestCode){

case2:

if(layout_pop!=null){

layout_pop.dismiss();

}

Uriuri=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;

case3:

if(layout_pop!=null){

layout_pop.dismiss();

}

if(data==null){

return;

}else{

saveCropAvator(data);

}

break;

default:

break;

}

}

图像裁剪实现代码:

privatevoidstartImageAction(Uriuri,intoutputX,intoutputY,intrequestCode,booleanisCrop){

Intentintent=null;if(isCrop){

intent=newIntent("com.android.camera.action.CROP");

}else{

intent=newIntent(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",pressFormat.JPEG.toString());

intent.putExtra("noFaceDetection",true);//nofacedetectionstartActivityForResult(intent,requestCode);

}

对头像裁剪过后,还需要将图片变为圆角,处理方法为:

/**

*将图片变为圆角

*

*@parambitmap

*原Bitmap图片

*@parampixels

*图片圆角的弧度(单位:像素(px))

*@return带有圆角的图片(Bitmap类型)*/

publicstaticBitmaptoRoundCorner(Bitmapbitmap,intpixels){

Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),

bitmap.getHeight(),Config.ARGB_8888);

Canvascanvas=newCanvas(output);finalintcolor=0xff424242;finalPaintpaint=newPaint();finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());finalRectFrectF=newRectF(rect);finalfloatroundPx=pixels;

paint.setAntiAlias(true);

canvas.drawARGB(0,0,0,0);

paint.setColor(color);

canvas.drawRoundRect(rectF,roundPx,roundPx,paint);

paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(bitmap,rect,rect,paint);returnoutput;

}

最后保存图片:

/**

*保存裁剪的头像

*

*@paramdata*/

privatevoidsaveCropAvator(Intentdata){

Bundleextras=data.getExtras();if(extras!=null){

Bitmapbitmap=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();

}

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。