Android 用户圆形图像的设置与上传

</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事件的传递处理,第一次写博客,谅解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值