安卓 上传头像 相机相册 剪裁
发布日期: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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SSM框架史上最简单快速搭建
下一篇:Android网络判断

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.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