android volley获取网络图片制作圆头像

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;
}

//参数1、是获取图片的url,如:http://image.so.com/v?q=图片&src=360pic_normal&fromurl=http%3A%2F%2Fwww.taopic.com%2Ftuku%2F201108%2F79056.html#q=%E5%9B%BE%E7%89%87&src=360pic_normal&fromurl=http%3A%2F%2Fwww.taopic.com%2Ftuku%2F201108%2F79056.html&lightboxindex=59&id=44a871e40f24d86fa4fa1298c23d9e58&multiple=0&itemindex=0&dataindex=59

参数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 布局文件

<ImageView
                android: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获取网络图片制作圆头像了,亲,你会了吗?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值