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

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

发表评论

最新留言

很好
[***.229.124.182]2024年03月29日 20时04分21秒