像QQ头像那样调用本地库上传到服务器,实现头像切换功能,我参考了一些代码大牛的博客,写出我百般试验的代码,大家参考一下,也提一些意见
首先要弹个框提示:
String[] items={"选择本地照片","拍照"}; AlertDialog.Builder builder=new AlertDialog.Builder(MyInfoActivity.this) .setTitle("添加图片") .setNegativeButton("取消",null) .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { switch (i){ case 0: /** *加载本地图库时跳转的对象 **/ Intent bendi=new Intent(Intent.ACTION_GET_CONTENT); bendi.setType("image/*"); startActivityForResult(bendi,1000); break; case 1:/** *加载相机时跳转的对象 **/
Intent came=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
tempUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"temp_image.jpg"));
came.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
startActivityForResult(came,2000);
break;
}
}
});builder.show();
//根据选择的图片在回调结果中修改图片MyInfoActivity是当前Activity@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);if(resultCode==MyInfoActivity.RESULT_OK) { switch (requestCode) { case 1000: //修改图片 cutImage(data.getData()); break; case 2000: cutImage(tempUri); break; case 3000: if(data!=null) { setImageToView(data); } break; } } }/** * 裁剪图片 * @param uri */ public void cutImage(Uri uri){ if(uri!=null) { tempUri=uri; Intent intent=new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri,"image/*"); intent.putExtra("crop","true"); 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,3000); } }/** * 控件加载图片 * @param data */ public void setImageToView(Intent data){ Bundle extras = data.getExtras(); if(extras!=null) { bitmap = extras.getParcelable("data"); ivMyInfoSet.setImageBitmap(bitmap); ByteArrayOutputStream baos=new ByteArrayOutputStream(); //把bitmap转化为byte[] bitmap.compress(Bitmap.CompressFormat.PNG,100,baos); byte[] bytes = baos.toByteArray(); //修改当前图片 ivMyInfoSet.setImageBitmap(bitmap); addFile(bytes); } }/** * 传输byte赋值给文件 * @param bytes */ private void addFile(byte[] bytes) { FileOutputStream out=null; try { out= new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/userhead.png")); out.write(bytes); (在此赋值或者上传文件就OK了) //输入发送头像 //String uid = userAll.getString("uid", null); //if(!TextUtils.isEmpty(uid)) { //Map<String,Object> map=new HashMap<>(); //map.put("uid",uid); //map.put("file",new File(Environment.getExternalStorageDirectory()+"/userhead.png")); //userPresenter.unload(map); } } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } }上传头像就完成了。