
安卓 上传头像 相机相册 剪裁
发布日期:2022-02-26 14:49:31
浏览次数:24
分类:技术文章
本文共 8357 字,大约阅读时间需要 27 分钟。
package com.bwie.jiaohaokang20181120;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Environment;import android.provider.MediaStore;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.View;import android.widget.ImageView;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import okhttp3.Call;import okhttp3.Callback;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;public class MainActivity extends AppCompatActivity { private RelativeLayout main_relative_touxiang; private View inflate; private PopupWindow popupWindow; private TextView popup_quxiao; private TextView popup_xiangce; private TextView popup_xiangji; private ImageView main_user_img; private static String path = "/sdcard/myHead/";//sd路径 private Bitmap head;//头像Bitmap /*** * 获得当前系统时间(字符串格式精确到秒) * @return */ public String getStringTodayTime() { Date todat_date = new Date(); //将日期格式化 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); //转换成字符串格式 return simpleDateFormat.format(todat_date); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_relative_touxiang = findViewById(R.id.main_relative_touxiang); inflate = View.inflate(MainActivity.this, R.layout.popupwindow, null); popupWindow = new PopupWindow(inflate, MATCH_PARENT, 400, true); popup_quxiao = inflate.findViewById(R.id.popup_quxiao); popup_xiangce = inflate.findViewById(R.id.popup_xiangce); popup_xiangji = inflate.findViewById(R.id.popup_xiangji); main_user_img = findViewById(R.id.main_user_img); popup_xiangji.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 设置调用系统摄像头的意图(隐式意图) Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //设置照片的输出路径和文件名 //设置图片的名称 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "head.png"))); //开启摄像头 startActivityForResult(intent, 1); popupWindow.dismiss(); } }); //popupwindow 相册 popup_xiangce.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 设置调用系统相册的意图(隐式意图) Intent intent = new Intent(); //设置值活动//android.intent.action.PICK intent.setAction(Intent.ACTION_PICK); //设置类型和数据 intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); // 开启系统的相册 startActivityForResult(intent, 2); popupWindow.dismiss(); } }); //取消按钮 popupwindow popup_quxiao.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); //点击头像布局显示popupwindow main_relative_touxiang.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.showAtLocation(inflate, Gravity.BOTTOM, 0, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("home", "onActivityResult: " + requestCode + ":" + resultCode); if (resultCode == RESULT_OK) { switch (requestCode) { //相机 case 1: File temp = new File(Environment.getExternalStorageDirectory() + "/head.png"); //裁剪图片 startPhotoZoom(Uri.fromFile(temp)); break; //相册 case 2: //裁剪图片 startPhotoZoom(data.getData()); break; //剪裁 case 3: Bundle extras = data.getExtras(); if (extras == null) { return; } head = extras.getParcelable("data"); if (head != null) { main_user_img.setImageBitmap(head); String fileName = path + "/head.png";//图片名字 setPicToView(head);//保存在SD卡中 File file1 = new File(fileName); uploadImage(fileName); } break; } } } //剪裁的方法 public void startPhotoZoom(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", 64); intent.putExtra("outputY", 64); intent.putExtra("return-data", true); startActivityForResult(intent, 3); } //上传 private void uploadImage(String path){ MediaType mediaType = MediaType.parse("multipart/form-data; charset=utf-8"); OkHttpClient mOkHttpClent = new OkHttpClient(); File file = new File(path); MultipartBody.Builder builder = new MultipartBody.Builder() .setType(mediaType) .addFormDataPart("file", "head.png", RequestBody.create(MediaType.parse("image/png"), file)) .addFormDataPart("uid", "21021"); RequestBody requestBody = builder.build(); Request request = new Request.Builder() .url("http://www.zhaoapi.cn/file/upload") .post(requestBody) .build(); Call call = mOkHttpClent.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { runOnUiThread(new Runnable() { @Override public void run() { Log.i("TAG", e.getMessage()); Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show(); } }); } @Override public void onResponse(Call call, Response response) throws IOException { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show(); } }); } }); } 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.png";//图片名字 try { b = new FileOutputStream(fileName); mBitmap.compress(Bitmap.CompressFormat.PNG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { //关闭流 b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } }}
转载地址:https://blog.csdn.net/qq_31353347/article/details/84308592 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2023年05月15日 23时17分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
计算机英语二国家线,历年考研英语二国家线
2019-08-24 11:20:50
ajax html send,Use AJAX to send html5 textarea directly without html | 易学教程
2019-08-24 11:20:49
html 每个选项后面加个删除,jQuery.html()将删除选择选项的所选属性
2019-08-24 11:20:49
南开中学 高考成绩查询 2021,天津市南开中学
2019-08-24 11:20:48
审论文HTML和pdf,浅谈HTML5的发展与现状(最标准格式论文).pdf
2019-08-24 11:20:48
html盒子模型 正方形嵌套,div盒子模型实例
2019-08-24 11:20:47
webpack对html压缩,求助,webpack 如何打包html,在html中可以压缩哪些东西?如何配置?...
2019-08-24 11:20:47
android漏洞公告,7月份Android安全公告公布 已修复多个严重漏洞
2019-08-24 11:20:46
正则匹配后缀 html,nginx 进行正则匹配(常见正则匹配符号表示)
2019-08-24 11:20:46
android info,总结Android中的Info系列类
2019-08-24 11:20:45
腾讯机顶盒 android,2021年网络机顶盒排行榜最强!泰捷、小米、腾讯极光深度评测...
2019-08-24 11:20:45
android10如何省电,安卓手机如何省电 这些方法都很有效
2019-08-24 11:20:44
android iterator,Iterator取内容
2019-08-24 11:20:43
android中拍照功能介绍,Android实现拍照功能
2019-08-24 11:20:43
荣耀9何时升级鸿蒙,华为并没有放弃荣耀!多款老机型可升级鸿蒙,荣耀9X最先被确认...
2019-08-24 11:20:42
Android组件化多个manifest,组件化引用极光推送,每个组件的build.gradle都需要写manifestPlaceholders...
2019-08-24 11:20:42
android 自定义控件队列弹出,Android自定义控件(一)——开关控件
2019-08-24 11:20:41
c语言捕捉信号的头文件,C语言之捕捉信号
2019-08-24 11:20:41
c语言 循环报错,while循环中的malloc与free报错
2019-08-24 11:20:40
这是一个人机反猜数字游戏,人想一个数,电脑来猜, c语言,“人机猜数游戏”C高手来~~~~~~~~~~~~~~~~~~~~? 爱问知识人...
2019-08-24 11:20:40