安卓 上传头像 相机相册 剪裁
发布日期:2022-02-26 14:49:31
浏览次数:50
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年03月29日 20时04分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
WINCE蓝牙应用开发方式
2021-06-30
WinCE蓝牙控制API函数 .
2021-06-30
wince下实现GPRS上网,程序控制拨号 .
2021-06-30
WinCE串口蓝牙的实现 .
2021-06-30
添加蓝牙通讯功能
2021-06-30
vim的常用配置及使用方法
2021-06-30
单片机I/O口推挽输出与开漏输出的区别
2021-06-30
WIN10映射ubuntu1604共享目录(网络驱动器)
2019-04-27
unbalanced enable irq 问题的解决 以及共享的gpio中断引起的问题
2019-04-27
linux下使用update-alternatives切换java版本的正确姿势
2019-04-27
安卓升级固件update.zip解析
2019-04-27
Android FrameWork学习(二)Android系统源码调试
2019-04-27
android ART编译预优化
2019-04-27
代码Overlay机制
2019-04-27
Android BOOTCLASSPATH详解
2019-04-27
android6.0单独编译和调试framework源码的方法
2019-04-27
sysfs cannot create duplicate filename问题
2019-04-27