上传头像和圆角图片

来源:互联网 发布:网络模块接法图解 b 编辑:程序博客网 时间:2024/05/18 15:28

Activity

package (包名)import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Bitmap;import android.net.Uri;import android.os.Environment;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import com.bwie.fragment12.presenter.PresenterLogin;import com.bwie.fragment12.view.LoginView;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import okhttp3.Call;public class TouXiangActivity extends AppCompatActivity implements LoginView {    private Button btn_change;    private ImageView iv_personal_icon;    private SharedPreferences sp;    protected static final int CHOOSE_PICTURE = 0;    protected static final int TAKE_PICTURE = 1;    private static final int CROP_SMALL_PICTURE = 2;    protected static Uri tempUri;    private PresenterLogin loginPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tou_xiang);        initview();        sp = getSharedPreferences("msg", MODE_PRIVATE);        loginPresenter = new PresenterLogin(this);        btn_change.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                showChoosePicDialog();            }        });    }    private void showChoosePicDialog() {        AlertDialog.Builder builder = new AlertDialog.Builder(this);        builder.setTitle("设置头像");        String[] items = { "选择本地照片", "拍照" };        builder.setNegativeButton("取消", null);        builder.setItems(items, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                switch (which) {                    case CHOOSE_PICTURE: // 选择本地照片                        Intent openAlbumIntent = new Intent(                                Intent.ACTION_GET_CONTENT);                        openAlbumIntent.setType("image/*");                        startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);                        break;                    case TAKE_PICTURE: // 拍照                        Intent openCameraIntent = new Intent(                                MediaStore.ACTION_IMAGE_CAPTURE);                        tempUri = Uri.fromFile(new File(Environment                                .getExternalStorageDirectory(), "image.jpg"));                        // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换                        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);                        startActivityForResult(openCameraIntent, TAKE_PICTURE);                        break;                }            }        });        builder.create().show();    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == RESULT_OK) { // 如果返回码是可以用的            switch (requestCode) {                case TAKE_PICTURE:                    startPhotoZoom(tempUri); // 开始对图片进行裁剪处理                    break;                case CHOOSE_PICTURE:                    startPhotoZoom(data.getData()); // 开始对图片进行裁剪处理                    break;                case CROP_SMALL_PICTURE:                    if (data != null) {                        setImageToView(data); // 让刚才选择裁剪得到的图片显示在界面上                    }                    break;            }        }    }    /**     * 裁剪图片方法实现     *     * @param uri     */    protected void startPhotoZoom(Uri uri) {        if (uri == null) {            Log.i("tag", "The uri is not exist.");        }        tempUri = 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", 150);        intent.putExtra("outputY", 150);        intent.putExtra("return-data", true);        startActivityForResult(intent, CROP_SMALL_PICTURE);    }    /**     * 保存裁剪之后的图片数据     *     * @param     *     * @param     */    protected void setImageToView(Intent data) {        Bundle extras = data.getExtras();        if (extras != null) {            Bitmap photo = extras.getParcelable("data");            //photo = Utils.toRoundBitmap(photo,tempUri); // 这个时候的图片已经被处理成圆形的了            iv_personal_icon.setImageBitmap(photo);            String data2 = photo+"";            sp.edit().putString("data",data2);            uploadPic(photo);        }    }    private File uploadPic(Bitmap bitmap) {        // 上传至服务器        // ... 可以在这里把Bitmap转换成file,然后得到file的url,做文件上传操作        // 注意这里得到的图片已经是圆形图片了        // bitmap是没有做个圆形处理的,但已经被裁剪了        File file=new File(Environment.getExternalStorageDirectory()+"/aaa.jpg");//将要保存图片的路径        try {            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);            bos.flush();            bos.close();        } catch (IOException e) {            e.printStackTrace();        }        return file;    }    private void initview() {        btn_change = (Button) findViewById(R.id.btn_change);        iv_personal_icon = (ImageView) findViewById(R.id.iv_personal_icon);    }    public void shangchuan(View view){        //将String类型字符串转化为Bitmap        File file = new File(Environment.getExternalStorageDirectory()+"/aaa.jpg");        Bundle bundle = getIntent().getExtras();        String uid = bundle.getString("uid");        System.out.println("----------uid:"+uid);        loginPresenter.upload(uid,file);    }    @Override    public void nameError(String msg) {    }    @Override    public void passError(String msg) {    }    @Override    public void successLogin(String code, String msg) {        System.out.println("======msg"+msg);        finish();    }    @Override    public void failLogin(String code, String msg) {    }    @Override    public void failure(Call call, IOException e) {    }}

圆角图片

package (包名)import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;/** * Created by on 2017/9/28. */public class ImageViewPlus extends ImageView {    private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);    private Bitmap mRawBitmap;    private BitmapShader mShader;    private Matrix mMatrix = new Matrix();    @Override    protected void onDraw(Canvas canvas) {        Bitmap rawBitmap = getBitmap(getDrawable());        if (rawBitmap != null){            int viewWidth = getWidth();            int viewHeight = getHeight();            int viewMinSize = Math.min(viewWidth, viewHeight);            float dstWidth = viewMinSize;            float dstHeight = viewMinSize;            if (mShader == null || !rawBitmap.equals(mRawBitmap)){                mRawBitmap = rawBitmap;                mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);            }            if (mShader != null){                mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());                mShader.setLocalMatrix(mMatrix);            }            mPaintBitmap.setShader(mShader);            float radius = viewMinSize / 2.0f;            canvas.drawCircle(radius, radius, radius, mPaintBitmap);        } else {            super.onDraw(canvas);        }    }    public ImageViewPlus(Context context, AttributeSet attrs) {        super(context, attrs);    }    private Bitmap getBitmap(Drawable drawable){        if (drawable instanceof BitmapDrawable){            return ((BitmapDrawable)drawable).getBitmap();        } else if (drawable instanceof ColorDrawable){            Rect rect = drawable.getBounds();            int width = rect.right - rect.left;            int height = rect.bottom - rect.top;            int color = ((ColorDrawable)drawable).getColor();            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);            Canvas canvas = new Canvas(bitmap);            canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));            return bitmap;        } else {            return null;        }    }}


原创粉丝点击