android volley获取网络图片制作圆头像
在app的开发中我们难免会用到圆头像,下面是简单的实现用volley获取网络图片来制作圆头像
1、圆头像图层的制作和网络请求获取图片
public class RoundTouXiang_class {RequestQueue reQueue;
Context context;
public RoundTouXiang_class(Context context) {
this.context=context;
}
// 方式1 获取本地图片做圆头像
/**
* 转换图片成圆形
*
* @param bitmap
* 传入Bitmap对象
* @return
*/
public static Bitmap toRoundBitmap(Bitmap bitmap) { //实现圆形头像图层函数
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float roundPx;
float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;
if (width <= height) {
roundPx = width / 2;
left = 0;
top = 0;
right = width;
bottom = width;
height = width;
dst_left = 0;
dst_top = 0;
dst_right = width;
dst_bottom = width;
} else {
roundPx = height / 2;
float clip = (width - height) / 2;
left = clip;
right = width - clip;
top = 0;
bottom = height;
width = height;
dst_left = 0;
dst_top = 0;
dst_right = height;
dst_bottom = height;
}
Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);
final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);
final RectF rectF = new RectF(dst);
paint.setAntiAlias(true);// 设置画笔无锯齿
canvas.drawARGB(0, 0, 0, 0); // 填充整个Canvas
// 以下有两种方法画圆,drawRounRect和drawCircle
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
// canvas.drawCircle(roundPx, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://trylovecatch.iteye.com/blog/1189452
canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle
return output;
}
参数2、是你要设置成圆头像的imageview的id
public void readBitmapViaVolley(String imgUrl, final ImageView imageView) { //通过volley获取网络图片reQueue=Volley.newRequestQueue(context);
ImageRequest imgRequest = new ImageRequest(imgUrl,
new Response.Listener<Bitmap>() {
public void onResponse(Bitmap bitmap) {
Bitmap bmBitmap = RoundTouXiang_class.toRoundBitmap(bitmap);
imageView.setImageBitmap(bmBitmap);
}
}, 300, 200, Config.ARGB_8888, new ErrorListener() {
public void onErrorResponse(VolleyError arg0) {
}
});
reQueue.add(imgRequest);
}
}
2、imageview 布局文件
<ImageViewandroid:id="@+id/img_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp" />
注:虽然是volley网络请求图片,但是我们这里不用networkimageview,我试过了,提取不到数据,只有用imageview才可以。
3、函数有了,图片有了,控件有了,就差调用了
其实调用很简单,因为在RoundTouXiang_class函数中,我们要进行网络请求,所以在调用volley是会用到reQueue=Volley.newRequestQueue(context);所以我们在调用RoundTouXiang_class函数之前声明一个RoundTouXiang_class对象如:
RoundTouXiang_class roundtouxiang;
roundtouxiang=new RoundTouXiang_class(this); //像 RoundTouXiang_clas中传入context 对象
最后就是
ImageView img=(ImageView)findViewById(R.id.img_header);
roundtouxiang.readBitmapViaVolley(imgu,img);
这样就可以简单的实现volley获取网络图片制作圆头像了,亲,你会了吗?