Android中更换头像功能的实现

点击头像实现更换头像,可以从相册里进行更换,也可以拍摄照片更换

运行效果图

点击从相册中选择,选择图片

 

点击从相册中选择

 

 

Activity中的代码,因为这是在我的项目中做的所以有些代码是没有必要的,在代码中写了注释,所以只需要从注释点击头像更换头像处看就好,

注意别忘了声明ImageButton按钮,Bitmap存放头像,path存放sd路径。

 

package com.bzu.fshiner.parttimejob.activity;import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;import com.bzu.fshiner.parttimejob.R;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import static android.app.Activity.RESULT_OK;/*** Created by Administrator on 2017/5/17.*/public class PersonalFragment extends Fragment  {private LinearLayout LL01,LL02,LL03;private Context mContext;private ImageButton touxiang;private Bitmap head;// 头像Bitmapprivate static String path = "/sdcard/myHead/";// sd路径public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){return inflater.inflate(R.layout.personal_fragment,container,false);}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.mContext = getActivity();}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);initView();//查看个人信息LL01.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(getActivity(),MorePersonActivity.class);startActivity(intent);}});//查看我的收藏LL02.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(getActivity(),CollectionActivity.class);startActivity(intent);}});//查看我发布的所有兼职LL03.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(getActivity(),MySendActivity.class);startActivity(intent);}});/*点击头像进行更换头像*/touxiang.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.touxiang:// 更换头像showTypeDialog();break;}}});}private void initView() {LL01=(LinearLayout)getActivity().findViewById(R.id.LL01);LL02=(LinearLayout)getActivity().findViewById(R.id.LL02);LL03=(LinearLayout)getActivity().findViewById(R.id.LL03);touxiang = (ImageButton)getActivity().findViewById(R.id.touxiang);Bitmap bt = BitmapFactory.decodeFile(path + "head.jpg");// 从SD卡中找头像,转换成Bitmapif (bt != null) {@SuppressWarnings("deprecation")Drawable drawable = new BitmapDrawable(bt);// 转换成drawabletouxiang.setImageDrawable(drawable);} else {/*** 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中**/}}private void showTypeDialog() {//显示对话框AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());final AlertDialog dialog = builder.create();View view = View.inflate(getActivity(), R.layout.dialog_select_photo, null);TextView tv_select_gallery = (TextView) view.findViewById(R.id.tv_select_gallery);TextView tv_select_camera = (TextView) view.findViewById(R.id.tv_select_camera);tv_select_gallery.setOnClickListener(new View.OnClickListener() {// 在相册中选取@Overridepublic void onClick(View v) {Intent intent1 = new Intent(Intent.ACTION_PICK, null);//打开文件intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");startActivityForResult(intent1, 1);dialog.dismiss();}});tv_select_camera.setOnClickListener(new View.OnClickListener() {// 调用照相机@Overridepublic void onClick(View v) {Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent2.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "head.jpg")));startActivityForResult(intent2, 2);// 采用ForResult打开dialog.dismiss();}});dialog.setView(view);dialog.show();}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case 1:if (resultCode == RESULT_OK) {cropPhoto(data.getData());// 裁剪图片}break;case 2:if (resultCode == RESULT_OK) {File temp = new File(Environment.getExternalStorageDirectory() + "/head.jpg");cropPhoto(Uri.fromFile(temp));// 裁剪图片}break;case 3:if (data != null) {Bundle extras = data.getExtras();head = extras.getParcelable("data");if (head != null) {/*** 上传服务器代码*/setPicToView(head);// 保存在SD卡中touxiang.setImageBitmap(head);// 用ImageButton显示出来}}break;default:break;}super.onActivityResult(requestCode, resultCode, data);}/*** 调用系统的裁剪功能** @param uri*/public void cropPhoto(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 250);intent.putExtra("outputY", 250);intent.putExtra("return-data", true);startActivityForResult(intent, 3);}private void setPicToView(Bitmap mBitmap) {String sdStatus = Environment.getExternalStorageState();if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用return;}FileOutputStream b = null;File file = new File(path);file.mkdirs();// 创建文件夹String fileName = path + "head.jpg";// 图片名字try {b = new FileOutputStream(fileName);mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {// 关闭流b.flush();b.close();} catch (IOException e) {e.printStackTrace();}}}
}

 

 

 

 

 

在主布局文件中只需要写一个ImageButton按钮就好

 

 

 <ImageButtonandroid:id="@+id/touxiang"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="0dp"android:background="@drawable/person_default"android:layout_centerHorizontal="true"/>

 

 


另外还需要写一个布局文件,取名为dialog_select_photo.xml,这个布局是点击图片按钮时弹出的选择框。

 

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="60dp"android:paddingRight="60dp"><TextViewandroid:id="@+id/tv_select_gallery"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="20dp"android:padding="20dp"android:gravity="center"android:text="从相册中选取" /><TextViewandroid:layout_below="@id/tv_select_gallery"android:id="@+id/tv_select_camera"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="20dp"android:gravity="center"android:text="拍摄照片" />
</RelativeLayout>

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17582.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android7.0实现头像更换功能

引言 在实现头像更换功能时&#xff0c;期间发现android7.0和7.0以下的版本有一些区别&#xff0c;这里记录下来希望可以帮助大家。 问题 按照以下的代码运行时调用相机会出现闪退 private void camera(){Intent cameraIntent new Intent(MediaStore.ACTION_IMAGE_CAPTURE…

java修改头像代码_用户修改头像功能

项目中需要进行用户头像的上传&#xff0c;并且还有预览功能&#xff0c;因为我的项目用的是vue的框架&#xff0c;因此留下作为备份&#xff0c;希望有需要的人可以参考。 页面代码&#xff1a; html 上传个人照片 data imageUrl: require(./img/upload.png) // 定义imageUrl默…

实现Android中更换头像功能

本文转载自:http://blog.csdn.net/melodev/article/details/51477369 写在前面&#xff1a; 更换头像这个功能在用户界面几乎是100%出现的。通过拍摄照片或者调用图库中的图片&#xff0c;并且进行剪裁&#xff0c;来进行头像的设置。 功能相关截图如下&#xff1a; 下面我…

PHP 针对多用户 实现头像更换

成品图思路登陆页面 表单制作验证码制作JavaScript刷新验证码 验证页面 验证逻辑页面跳转 header函数Meta标签JavaScript 上传页面 个人主页上传核心 最终结果 登陆页面验证结果个人主页最新头像 总结 一个网站&#xff0c;其实说白了就是某几个特定功能的组合&#xff0c;而…

头像修改功能的实现

头像修改功能的实现 介绍 本文编写了前端和后端&#xff0c;一起实现了上传图片同步显示并且通过后端保存图片到本地目录。前端修改图片按钮样式 功能实现&#xff1a;首先设置原本的文件选择器不显示&#xff0c;也就是display&#xff1a;none&#xff1b;然后写下图片img标…

5分钟实现Android中更换头像功能

5分钟实现Android中更换头像功能 本文原创&#xff0c;转载请经过本人准许 写在前面&#xff1a; 更换头像这个功能在用户界面几乎是100%出现的。通过拍摄照片或者调用图库中的图片&#xff0c;并且进行剪裁&#xff0c;来进行头像的设置。 功能相关截图如下&#xff1a; 下面…

点击头像选择图片更换头像

效果图如下所示(视频再转格式的时候被挤变形了一点&#xff0c;各位童鞋将就一下&#xff0c;嘻嘻)&#xff1a; 关键代码&#xff08;html&#xff09;&#xff1a; <span class"headerSpan"><img class"headerImg" :src"headerUrl"&g…

chatgpt赋能python:Python图标为什么会变成白色?

Python图标为什么会变成白色&#xff1f; 最近&#xff0c;你可能已经注意到了一个很奇怪的现象&#xff0c;Python官网上的ICON图标变成了白色。对于许多Python用户来说&#xff0c;这个变化似乎令人困惑甚至恼火。今天&#xff0c;我们来了解一下这个问题的原因&#xff0c;…

FinChat - 金融行业的合规即时通讯工具

对于金融行业而言&#xff0c;不论是企业微信还是钉钉&#xff0c;都不是最佳的选择&#xff0c;这等同于把数据的控制权交给阿里腾讯。金融机构对数据非常敏感&#xff0c;对数据的安全、合规、保密、留痕的要求也远远超过其他行业。数据就是的数字时代的金矿&#xff0c;是金…

python简易语音助手

先上图 本程序使用的软件&#xff1a; PyCharm&#xff0c;Designer&#xff08;PyQt5界面编辑软件&#xff09; 步骤 1.使用designer绘制出程序界面的图,新建文件选择main windows 使用的控件&#xff1a; 按键 文本框 Line Edit 过程条 Priogress Bar 这里是装饰的一个作…

使用小爱同学语音控制电脑关机 - Winform C#

使用小爱同学语音控制电脑变关机 前言实现原理准备注册巴法云账号接入巴法云接入米家 编写程序连接TCP接收信息并运行关机指令发送指令订阅主题添加心跳机制后台运行阻止默认关闭窗口事件 完整代码 前言 小爱同学应该已经是家喻户晓的了&#xff0c;现在一直用来控制家里的家电…

用Kotlin开发智能语音助手,打造一款“懂你”的对话精灵

简介 Hi&#xff0c;各位同学大家好&#xff0c;我有新课上线啦&#xff0c;距离上一门课程已经过去九个月了&#xff0c;这门课的知识点是以Kotlin为主的&#xff0c;自Kotlin被Google转正之后&#xff0c;这门语言就备受我们Android开发者的关注&#xff0c;经过几年的发展下…

用Python程序实现语音识别就是这么简单!​

前言 Python程序提供了其他技术无法比拟的交互性和可访问性&#xff0c;重要的是&#xff0c;在 Python 程序中实现语音识别非常简单。我们一起来了解python程序的&#xff1a;语音识别的工作原理、PyPI 支持哪些软件包以及如何安装和使用 SpeechRecognition 软件包&#xff0…

树莓派小爱同学、天猫精灵、智能音箱、百度语音极速版、百度语音标准版、语音识别、语音合成终极方案

第一句话&#xff0c;python2版本的代码&#xff0c;python3你改改就完事了 流程图如下&#xff1a; 全套教程下载地址点击下载 首先需要调用这个方法安装百度的语音识别 https://ai.baidu.com/ai-doc/SPEECH/Bk4o0bmt3 安装使用Python SDK有如下方式&#xff1a; 如果已安…

uniapp开发微信小程序实现语音识别,使用微信同声传译插件,

第一步&#xff1a;在微信小程序管理后台&#xff1a;“设置”-》“第三方设置”-》“插件管理”中添加插件。 但是这个地方&#xff0c;没有搜索到插件&#xff0c;就到微信服务市场 搜索到以后添加到需要的小程序里面&#xff0c;然后返回管理中心查看&#xff0c;就可以看…

小白也可以学会小爱同学语言控制灯

教程 软件准备 电脑端安装Arduino软件&#xff0c;手机端安装点灯科技APP&#xff0c;以及米家APP和小爱音响。 电脑端所需以及点灯科技APP都在在网盘资料文件夹中&#xff0c;需要网盘资源的评论区找我要。 硬件准备 小爱音响一个 ESP8266模块一个 舵机一个 硬件连接 …

基于Blinker的小爱同学语音控制【脱坑指南】

基于Blinker的小爱同学语音控制ESP8266 前些天在使用esp8266时遇到很多小爱不能控制设备问题&#xff0c;现在来叙述我控制过程中所遇到的问题&#xff0c;以及到完整的小爱能成功控制Esp8266的过程。 1.需要先安装8266_package_2.7.4.exe,不然不能够正确使用&#xff0c;相关…

国产开源版「ChatGPT插件系统」来了!豆瓣、搜索一应俱全,清华、面壁智能等联合发布...

视学算法报道 编辑&#xff1a;好困 【导读】近期&#xff0c;面壁智能联合来自清华、人大、腾讯的研究人员共同发布了中文领域首个基于交互式网页搜索的问答开源模型WebCPM&#xff0c;这一创举填补了国产大模型该领域的空白。面壁智能自研工具学习引擎BMTools也因此被成功实…

多快好省的多样算力,让下一代互联网如你所愿

从前段时间让所有人刮目相看的AI绘画&#xff0c;到最近火爆全网的CharGPT&#xff0c;2022年的互联网行业为我们贡献了无数新鲜点子和妙哉的应用&#xff0c;始终令人回味无穷。回首这一年&#xff0c;我们好像并没有见证新的“杀手级”应用诞生&#xff1b;但仔细回味&#x…

泰坦号内爆5位富豪遇难!AI复原最后恐怖瞬间,设计缺陷真相公开

转自&#xff1a;新智元 30美元游戏手柄可操控潜水器&#xff1f;一系列巨大设计缺陷&#xff0c;注定了5位富人「泰坦尼克号」残骸之旅是一场生命的豪赌。 失踪4天&#xff0c;深海「泰坦号」潜水器竟灾难性内爆。 5位乘员全部遇难&#xff01; 与爆炸不同&#xff0c;内爆是一…