</pre>用户圆形图像的设置与上传,技术使用了框架imageloader jar包,可以进行图片的加载,可以使用imageloader 也可以自己写 图片的选择当时选择了系统自带的图片管理器,图片的剪切使用系统自带的。直接贴出代码</p><p>1.<img src="https://img-blog.csdn.net/20161102143159959?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20161102143307944?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20161102143415764?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20161102143532109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p></p><p><pre name="code" class="java">public class SettingUserImageActivity extends BaseActivity implements View.OnClickListener {
private static final int ALBUM_REQUEST_CODE = 1;
private static final int CAMERA_REQUEST_CODE = 2;
private static final int CROP_REQUEST_CODE = 4;
private static final String IMAGE_UNSPECIFIED = "image/*";
private TitleBarView titleBarView;
private ImageView iv_user_image;
private Button btn_photo, btn_camer;
private static final int REQUEST_CAMERA = 0;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.CAMERA};
@Override
public int getLayoutResourse() {
return R.layout.activity_setting_user_image;
}
@Override
public void init() {
settTitle();
initView();
initViewAfter();
}
private void initViewAfter() {
ImageLoader.getInstance().displayImage("file:///storage/emulated/0/chaoyang/" + MyApplication.username + ".png", iv_user_image);
// ImageLoader.getInstance().displayImage(MyApplication.getInstance().HostName + "/upload/selficon/" + MyApplication.username + ".png",
// iv_user_image,
// MyApplication.getInstance().getImageOptions(
// new RoundedBitmapDisplayer(5)));
}
private void settTitle() {
titleBarView = getHeadbar();//父类进行了初始化
//测试左,中,右边的文字
if (titleBarView != null) {
titleBarView.setLeftAndCenterVisible();
titleBarView.setTitle("设置个人头像");
titleBarView.doBack(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}
private void initView() {
iv_user_image = (ImageView) findViewById(R.id.iv_user_image);
btn_camer = (Button) findViewById(R.id.btn_camer);
btn_camer.setOnClickListener(this);
btn_photo = (Button) findViewById(R.id.btn_photo);
btn_photo.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_photo:
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
startActivityForResult(intent, ALBUM_REQUEST_CODE);
break;
case R.id.btn_camer:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.
getExternalStorageDirectory(), "temp.jpg")));
startActivityForResult(intent, CAMERA_REQUEST_CODE);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ALBUM_REQUEST_CODE:
LogUtils.e("相册 [ " + data + " ]");
if (data == null) {
return;
}
startCrop(data.getData());
break;
case CAMERA_REQUEST_CODE:
File picture = new File(Environment.getExternalStorageDirectory()
+ "/temp.jpg");
LogUtils.e("相机文件路径:" + picture.getAbsolutePath());
startCrop(Uri.fromFile(picture));
break;
case CROP_REQUEST_CODE:
if (data == null) {
// TODO 如果之前以后有设置过显示之前设置的图片 否则显示默认的图片
ImageLoader.getInstance().displayImage("file:///storage/emulated/0/chaoyang/" + MyApplication.username + ".png", iv_user_image);
// ImageLoader.getInstance().displayImage("http://172.16.0.180:8080/upload/selficon/" + "default.png",
// iv_user_image,
// MyApplication.getInstance().getImageOptions(
// new RoundedBitmapDisplayer(5)));
return;
}
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件
File fImage = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/chaoyang/" + MyApplication.username + ".png");
try {
fImage.createNewFile();
FileOutputStream iStream = new FileOutputStream(fImage);
photo.compress(Bitmap.CompressFormat.PNG, 100, iStream);
} catch (Exception e) {
e.printStackTrace();
}
iv_user_image.setImageBitmap(photo); //把图片显示在ImageView控件上
LogUtils.e("图片截取的路径:" + fImage.getAbsolutePath());
loadUserImage(fImage);
}
break;
default:
break;
}
}
/**
* 上传图片
*/
public void loadUserImage(File file) {
showLoad();
RequestParams requestParams = new RequestParams();
requestParams.addHeader("Expect", "100-Continue");
requestParams.addBodyParameter("userid", MyApplication.userid);
requestParams.addBodyParameter("img", MyApplication.username + ".png");
requestParams.addBodyParameter("uploadfile", file);
HttpUtils http = new HttpUtils();
http.send(HttpRequest.HttpMethod.POST, MyApplication.getInstance().HostName + "/app/user/selfPhoto", requestParams, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
L.e("成功了" + responseInfo.result);
T.showMyToast(SettingUserImageActivity.this, getResources().getString(R.string.commit_success));
dismissLoad();
EventBus.getDefault().post(new MessageEvent(1, "opentask", ""));//图片设置成功
onBackPressed();
}
@Override
public void onFailure(HttpException e, String s) {
T.showMyToast(SettingUserImageActivity.this, getResources().getString(R.string.commit_error));
LogUtils.e("失败数据:" + e.toString() + "-----" + s);
dismissLoad();
}
});
}
/**
* 开始裁剪
*
* @param uri
*/
private void startCrop(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");//调用Android系统自带的一个图片剪裁页面,
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");//进行修剪
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_REQUEST_CODE);
}
}
继承了BaseActivity,就省略。。。。
接下来就是圆形图片的回现了。。。和初始化网络加载圆形图像
private String path="/storage/emulated/0/chaoyang/";
if (fileIsExists(path + MyApplication.username + ".png")) {
Bitmap bitmap = getLoacalBitmap(path + MyApplication.username + ".png");
iv_user_image.setImageBitmap(toRoundCorner(bitmap, 2));
} else {
ImageLoader.getInstance().displayImage(MyApplication.getInstance().HostName + "/upload/selficon/" + MyApplication.username + ".png",
iv_user_image,
getImageOptions(new RoundedBitmapDisplayer(5)));
}
//判断文件是否存在
public boolean fileIsExists(String strFile) {
try {
File f = new File(strFile);
if (!f.exists()) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
/**
* 圆形
* @param bitmap
* @param ratio
* @return
*/
public static Bitmap toRoundCorner(Bitmap bitmap, float ratio) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
canvas.drawRoundRect(rectF, bitmap.getWidth() / ratio,
bitmap.getHeight() / ratio, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
System.out.println("pixels+++++++" + String.valueOf(ratio));
return output;
}
有时间写一个demo,还有EventBus事件的传递处理,第一次写博客,谅解。