Android 更换头像

  • 前言
  • 正文
    • 一、新建项目
    • 二、配置项目
    • 三、布局、样式改动
    • 四、权限请求
    • 五、底部弹窗显示
    • 六、工具类
    • 七、打开相机、相册
    • 八、页面返回显示图片
    • 九、本地缓存
    • 十、后台获取
    • 十一、源码
  • 总结

运行效果图:

前言

  做Android应用开发,通常是有很多的功能组成,今天就来看一下这个用户头像更换的功能该怎么去写。相信很多的小伙伴都写过这个功能,因为作为一个APP来说这是很普遍的功能,基本都会有。只要你的APP有用户模块,就会有用户的个人信息的修改,比如常规的手机号码修改、地址修改、头像修改、昵称修改等。这里面技术含量高一点的就是头像修改了,进入正题吧。


正文

  这里我还是新建一个项目来做这个头像修改的功能,这样对于没有接触过这个功能的朋友更友好,这也是我一直以来的写作风格,不要嫌我啰嗦啊。

一、新建项目

创建一个名为ChangeAvatarDemo的项目

项目创建好之后,先想清楚你的这个功能需要什么,换头像常规肯定是上传到后台去,那么你肯定是要有网络权限的,其次如果你的网络请求地址是http开头的话,而在Android9.0及以上版本则要配置http访问许可才行,之后你是否会用到一些第三方框架,比如圆形头像,圆角头像、图片加载、动态权限请求。

二、配置项目

基于这些考虑,首先打开app模块下的build.gradle,在dependencies闭包下添加如下依赖:

 //权限请求框架implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'implementation "io.reactivex.rxjava2:rxjava:2.0.0"//热门强大的图片加载器implementation 'com.github.bumptech.glide:glide:4.11.0'annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'//Google Material控件,以及迁移到AndroidX下一些控件的依赖implementation 'com.google.android.material:material:1.2.0'

然后在android闭包下指定JDK版本为1.8

 compileOptions {sourceCompatibility = 1.8targetCompatibility = 1.8}

添加位置如下图所示:

然后点击右上角Sync进行同步,到这里gradle就配置完成了。

然后打开AndroidManifest.xml,在里面配置如下权限:

 <!--网络权限--><uses-permission android:name="android.permission.INTERNET"/><!--相机权限--><uses-permission android:name="android.permission.CAMERA"/><!-- 读写文件权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

添加位置如下图所示:

这里还有一个要适配,那就是在Android10.0时增加了作用域存储,因此我这个不用这个作用域存储,所以在你的application标签下增加这样一句话

 android:requestLegacyExternalStorage="true"

三、布局、样式改动

首先打开项目中的styles.xml,在里面增加一个样式:

 <!-- 圆形图片 --><style name="circleImageStyle"><item name="cornerFamily">rounded</item><item name="cornerSize">50%</item></style>

然后在layout包下新建一个dialog_bottom.xml,里面的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FFF"android:orientation="vertical"><TextViewandroid:id="@+id/tv_take_pictures"android:layout_width="match_parent"android:layout_height="wrap_content"android:foreground="?android:attr/selectableItemBackground"android:gravity="center"android:padding="16dp"android:text="拍照"android:textColor="#000" /><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="#EEEEEE" /><TextViewandroid:id="@+id/tv_open_album"android:layout_width="match_parent"android:layout_height="wrap_content"android:foreground="?android:attr/selectableItemBackground"android:gravity="center"android:padding="16dp"android:text="打开相册"android:textColor="#000" /><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#EEEEEE" /><TextViewandroid:id="@+id/tv_cancel"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FFF"android:foreground="?android:attr/selectableItemBackground"android:gravity="center"android:padding="16dp"android:text="取消"android:textColor="#000" /></LinearLayout>

这是一个弹窗的布局文件,里面提供你选择拍照、打开相册、取消。而且从命名来看,这是一个底部弹窗。所以需要一个地方去触发这个弹窗从屏幕底部出现。下面打开activity_main.xml,修改代码后如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"tools:context=".MainActivity"><!--圆形图片--><com.google.android.material.imageview.ShapeableImageViewandroid:id="@+id/iv_head"android:layout_width="200dp"android:layout_height="200dp"android:onClick="changeAvatar"android:src="@mipmap/ic_launcher"app:shapeAppearanceOverlay="@style/circleImageStyle" /></LinearLayout>

这里我用了一个ShapeableImageView,这是material库里面的一个控件,你只要知道它比普通的ImageView要

Android 更换用户头像(拍照、相册选取)相关推荐

  1. Android更换用户头像实现

    使用 BitmapFactory.Options options2 = new BitmapFactory.Options();options2.inPreferredConfig = Bitmap. ...

  2. app如何更换用户头像信息呢?不妨这样做

    对于现在的手机应用而言,要想获得更多的人的使用,就需要给用户更多的自由功能才行,这也是基于用户体验开发软件的核心思想,一切以用户为中心,想用户之所想,做用户之所需.今天我就来谈一谈刚学到的一个关于设置 ...

  3. android开发——用户头像

    最近,小灵狐得知了一种能够加快修炼速度的绝世秘法,那便是修炼android神功.小灵狐打算用android神功做一个app,今天他的修炼内容就是头像功能.可是小灵狐是个android小白啊,所以修炼过 ...

  4. C# 项目--更换用户头像,使用相对路径

    软件: Visual Studio 2019 项目类型: C# Windows窗体应用(.NET Framework) 目的: 本地项目,保存用户的头像(图片文件),使用绝对路径,一般不会出现问题.但 ...

  5. android 制作用户头像,Android实现带头像的用户注册页面

    1.首先是注册页面的布局: android:layout_width="fill_parent" android:layout_height="fill_parent&q ...

  6. uniapp 实现拍照 相册选取选视频和照片

    <view class="img-show-pick" @click="showActionSheet" v-if="isEdit"& ...

  7. android 制作用户头像,android 切换头像功能实现

    接到一个新需求,用户可以自己跟换自己的头像 1.可以使用相机或是选择照片 2.剪切头像 3.保存头像到本地 实现步骤: 1.我们首先提供用户选择是相机还是相册: 使用alterDialog让用户选择, ...

  8. 微信小程序--更换用户头像/上传用户头像/更新用户头像

    changeAvatar:function (){var that=this;wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compr ...

  9. php 更换用户头像,替换用户头像

    写个上传文件的的表单即可 再写个处理文件的php if ((($_FILES["file"]["type"] == "image/gif") ...

最新文章

  1. 错误(活动)E0020未定义标识符 “_TCHAR“
  2. 如何最大限度提升虚拟内存性能(组图)
  3. 男人最佳的生育年限,程序员们,看看吧!!!
  4. java httpclient 返回xml_通过httpClient通过post向接口发送xml数据,并处理返回的xml报文...
  5. SharePoint2010升级到SharePoint2013操作手册
  6. 如何在Cocos2D游戏中实现A*寻路算法(三)
  7. BootstrapTable的使用教程
  8. 奇迹1.03H服务端开服架设文件Data文件详解
  9. python开头编码cc手_python 利用cip.cc查询IP归属地
  10. PS不改变图片分辨率条件下改变照片kb大小
  11. c语言入门自学mobi,算法精解:C语言描述[AZW3][EPUB][MOBI][23.00MB]
  12. 初识EFR32BG22 ---- 能源管理篇
  13. [USACO1.3]虫洞wormhole
  14. 不能编程、烧钱、没用?潘建伟直播回应“九章”量子计算争议
  15. $.ajaxSetup is not a function
  16. Evolutionary Computing: 3. Genetic Algorithm(2)
  17. WPS JS详细教程
  18. WSN(3)(1):第三章  无线传感网络的通信与组网
  19. ssh无输入密码登录问题
  20. ubuntu修改时区,tzselect报错: /usr/share/zoneinfo/iso3166.tab: No such file or directory

热门文章

  1. 简单易懂ppi和dpi的本质和由来
  2. 纯日记+游戏推荐(妈妈把我的游戏藏起来了)
  3. php命令执行后门,php后门木马常用命令
  4. 李刚疯狂JAVA面向对象章节
  5. 区块链目前的几大共识算法
  6. 1758: [Wc2010]重建计划(TLE)
  7. Windows Server 2008 R2 SP1中的具体改进
  8. C语言:将邻接矩阵转换为邻接表算法
  9. POJ 1830 开关问题 高斯消元
  10. zebra ZT41142 打印机配置网络连接问题