Android实现用户头像更换操作,android用户头像

4
回复
1223
查看
[复制链接]

446

主题

1132

帖子

1989

安币

手工艺人

发表于 2018-1-10 14:36:35 | 显示全部楼层 |阅读模式

        你以为头像更换很容易?或许对于用户来讲,在微信上更换一个头像只是点击头像,选择拍照或相册,裁剪返回而已。但是对于程序员来说,要实现其实也挺吃力的(小火柴花了一个下午整理~_~)。

        正如用户使用那样,代码的实现也是按照操作的顺序而逐步展开。如下图:

        

        接下来主要来讲解一下代码:

        1. 弹框选择相册或拍照

        比较简单的方式就是直接使用alertdialog弹出选项供用户进行选择

[Java] 查看源文件 复制代码
public static void showimagepickdialog(final activity activity){

 string title = "选择获取图片方式";
 string[] items = new string[]{"拍照","相册"};

 new alertdialog.builder(activity)
  .settitle(title)
  .setitems(items, new dialoginterface.onclicklistener() {
   @override
   public void onclick(dialoginterface dialog, int which) {

     dialog.dismiss();
     switch (which){
       case 0:
       //选择拍照
       pickimagefromcamera(activity);
       break;
       case 1:
       //选择相册
       pickimagefromalbum(activity);
       break;
       default:
       break;
      }
     }
    }).show();
 }

        

        2. 调用系统相机

        在调用系统相机前,我们需要传入自定义路径的图片uri,指定拍照的图片存放在这个uri下,如果直接在返回时使用getdata()获取的是压缩过的bitmap数据

[Java] 查看源文件 复制代码
public static void pickimagefromcamera(final activity activity){
 //获得指定路径的uri
 imageurifromcamera = getimageuri();

 intent intent = new intent();
 intent.setaction(mediastore.action_image_capture);
 intent.putextra(mediastore.extra_output,imageurifromcamera);
 activity.startactivityforresult(intent,request_code_from_camera);
}

        3. 打开系统相册

        直接调用系统相册,再对返回数据进行操作

[Java] 查看源文件 复制代码
public static void pickimagefromalbum(final activity activity){

  //隐式调用,可能出现多种选择
  intent intent = new intent();
  intent.setaction(intent.action_get_content);
  intent.settype("image/*");
  activity.startactivityforresult(intent,request_code_from_album);
}

        4. 对返回图片uri进行裁剪工作

        对于拍照返回,直接对返回图片进行裁剪即可;而对于选择相册返回,我们需要先将原图片复制到我们自定义的目录下(避免裁剪操作对原图片的质量产生影响),然后对复制的图片进行裁剪

[Java] 查看源文件 复制代码
@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
  super.onactivityresult(requestcode, resultcode, data);

  switch (requestcode){
   case imageutils.request_code_from_album: {

    if (resultcode == result_canceled) { //取消操作
     return;
    }

    uri imageuri = data.getdata();
    imageutils.copyimageuri(this,imageuri); //复制图片
    imageutils.cropimageuri(this, imageutils.getcurrenturi(), 200, 200); //裁剪图片
    break;
   }
   case imageutils.request_code_from_camera: {

    if (resultcode == result_canceled) { //取消操作
     imageutils.deleteimageuri(this, imageutils.getcurrenturi()); //删除uri
    }

    imageutils.cropimageuri(this, imageutils.getcurrenturi(), 200, 200); //裁剪图片
    break;
   }
   case imageutils.request_code_crop: {

    if (resultcode == result_canceled) { //取消操作
     return;
    }

    uri imageuri = imageutils.getcurrenturi();
    if (imageuri != null) {
     imageview.setimageuri(imageuri); //显示图片
    }
    break;
   }
   default:
    break;
  }
 }

        以上只给了部分代码,需要完整代码的同学可以到github上下载:
https://github.com/zhoucp/photodemo


17

主题

9314

帖子

2336

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-11 08:45:45 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

92

主题

9607

帖子

1971

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-12 09:19:32 | 显示全部楼层
每次我都积极回帖的,想要安币~

62

主题

9813

帖子

910

安币

代码手工艺人

学海无涯

Rank: 4

QQ达人

发表于 2018-1-13 15:11:02 | 显示全部楼层
支持,感谢,祝巴士越来越好~

14

主题

9459

帖子

4727

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2018-1-14 06:43:35 | 显示全部楼层
不错不错,楼主辛苦了。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )