当前位置: 移动技术网 > 移动技术>移动开发>Android > Android实现本地上传图片并设置为圆形头像

Android实现本地上传图片并设置为圆形头像

2019年07月24日  | 移动技术网移动技术  | 我要评论

先从本地把图片上传到服务器,然后根据url把头像处理成圆形头像。

因为上传图片用到bmob的平台,所以要到bmob()申请密钥。

效果图:

核心代码:

复制代码 代码如下:

public class mainactivity extends activity {
        private imageview iv;
        private string appkey="";                //填写你的application id
        private string path=environment.getexternalstoragedirectory()+"/11.jpeg";        //要上传的图片的路径
        public final int size=2*1024;               
        protected void oncreate(bundle savedinstancestate) {
                super.oncreate(savedinstancestate);
                bmob.initialize(this, appkey);                //初始化bmob sdk
                setcontentview(r.layout.activity_main);
                initview();
        }
        private void initview() {
                // todo auto-generated method stub
                iv=(imageview)findviewbyid(r.id.iv);
        }
        /**
         * 上传文件到bmob后台
         * */
        public void upload(view v){
                final bmobfile file=new bmobfile(new file(path));
                file.uploadblock(this, new uploadfilelistener() {
                        @override
                        public void onsuccess() {
                                // todo auto-generated method stub
                                person p=new person();
                                p.seturl(file.getfileurl(mainactivity.this));
                                p.save(mainactivity.this);
                                mytask task=new mytask();
                                task.execute(file.getfileurl(mainactivity.this));
                                toast("上传成功 ");
                        }
                        @override
                        public void onfailure(int arg0, string arg1) {
                                // todo auto-generated method stub
                                toast("上传失败 "+arg1);
                                log.i("---------", "------error "+arg1);
                        }
                });
        }
        /**
         * 根据url获取bitmap
         * */
        public bitmap gethttpbitmap(string url){
                bitmap bitmap=null;
                url myurl;
                try {
                        myurl=new url(url);
                        httpurlconnection conn=(httpurlconnection)myurl.openconnection();
                        conn.setconnecttimeout(5000);
                        conn.connect();
                        inputstream is=conn.getinputstream();
                        bitmap=bitmapfactory.decodestream(is);
                        //把bitmap转成圆形
                        bitmap=toroundbitmap(bitmap);
                        is.close();
                } catch (malformedurlexception e) {
                        // todo auto-generated catch block
                        e.printstacktrace();
                } catch (ioexception e) {
                        // todo auto-generated catch block
                        e.printstacktrace();
                }
                //返回圆形bitmap
                return bitmap;
        }
        /**
         * 把bitmap转成圆形
         * */
        public bitmap toroundbitmap(bitmap bitmap){
                int width=bitmap.getwidth();
                int height=bitmap.getheight();
                int r=0;
                //取最短边做边长
                if(width<height){
                        r=width;
                }else{
                        r=height;
                }
                //构建一个bitmap
                bitmap backgroundbm=bitmap.createbitmap(width,height,config.argb_8888);
                //new一个canvas,在backgroundbmp上画图
                canvas canvas=new canvas(backgroundbm);
                paint p=new paint();
                //设置边缘光滑,去掉锯齿
                p.setantialias(true);
                rectf rect=new rectf(0, 0, r, r);
                //通过制定的rect画一个圆角矩形,当圆角x轴方向的半径等于y轴方向的半径时, 
                //且都等于r/2时,画出来的圆角矩形就是圆形
                canvas.drawroundrect(rect, r/2, r/2, p);
                //设置当两个图形相交时的模式,src_in为取src图形相交的部分,多余的将被去掉
                p.setxfermode(new porterduffxfermode(mode.src_in));
                //canvas将bitmap画在backgroundbmp上
                canvas.drawbitmap(bitmap, null, rect, p);
                return backgroundbm;
        }
        class mytask extends asynctask<string, string, bitmap>{
 
                @override
                protected bitmap doinbackground(string... arg0) {
                        // todo auto-generated method stub
                        string url=arg0[0];
                        bitmap bm=gethttpbitmap(url);
                        return bm;
                }
                @override
                protected void onpostexecute(bitmap result) {
                        // todo auto-generated method stub
                        iv.setimagebitmap(result);
                }
        }
        public void toast(string msg){
                toast.maketext(this, msg, toast.length_short).show();
        }
}

以上所述就是本文的全部内容了,希望大家能喜欢。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网