/** * 选择头像上传 */ public void showDialog() { LayoutInflater inflater = LayoutInflater.from(context);/** * 点击之后弹出的popwindow */
View mView = inflater.inflate(R.layout.activity_main_photo, null); PhotoMode photoMode = new PhotoMode(context, mView, new PhotoMode.OnPublicCommentClickListener() { @Override public void onClick(String comment) { if ("2".equals(comment)) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 判断存储卡是否可以用,可用进行存储// 拍照if (SDCardUtils.checkSDCardOK()) { intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(headImagePath))); startActivityForResult(intent, CAMERA_REQUEST_CODE); } }else if ("1".equals(comment)) { Intent picture = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(picture, IMAGE_REQUEST_CODE); } } }); // 产生背景变暗效果 WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes(); lp.alpha = 0.4f; getActivity().getWindow().setAttributes(lp); // 在dismiss中恢复透明度 photoMode.showAtLocation(mView, Gravity.BOTTOM, 0, 0); photoMode.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes(); lp.alpha = 1f; getActivity().getWindow().setAttributes(lp); } });}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case IMAGE_REQUEST_CODE: startPhotoZoom(data.getData()); break; case CAMERA_REQUEST_CODE: if (SDCardUtils.checkSDCardOK()) { File tempFile = new File(headImagePath); startPhotoZoom(Uri.fromFile(tempFile)); } else { toastInfor("未找到存储卡,无法存储照片!"); } break; case RESULT_REQUEST_CODE: if (data != null) { setImageToView(data); } break; } } super.onActivityResult(requestCode, resultCode, data);}/** * 裁剪图片方法实现 * * @param uri */public void startPhotoZoom(Uri uri) { if (uri == null) { Log.i("tag", "The uri is not exist."); } 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", 320); intent.putExtra("outputY", 320); intent.putExtra("return-data", true); startActivityForResult(intent, 2);}/** * 保存裁剪之后的图片数据 */private void setImageToView(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); // Bitmap photoBitmap = toRoundBitmap(photo); saveBitmapToJPG(photo); ThreadUtil.execute(new RunnableTask() { @Override public void run() { startUploadImage(); } }); }}public void saveBitmapToJPG(Bitmap bitmap) { Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(newBitmap); canvas.drawColor(getResources().getColor(R.color.personal_blue)); canvas.drawBitmap(bitmap, 0, 0, null); try { OutputStream stream = new FileOutputStream(headImagePath); newBitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); stream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}// 从相册中选择
//上传图片到服务器private void startUploadImage() { File headFile = new File(headImagePath); if (headFile != null && headFile.exists()) { curUser = UserFactory.getUserManager().getCurrentUser(); Map<String, String> uploadParams = new HashMap<String, String>(); uploadParams.put("uid", curUser.getUid()); uploadParams.put("accessToken", curUser.getAccessToken()); OAHttpUtil.upload("user/setheadimg&f=1", headFile, uploadParams, HttpUploadAPIRsp.class, new IHttpUploadCallable<HttpUploadAPIRsp>() { @Override public void onSuccess(HttpUploadAPIRsp httpUploadAPIRsp, String filePath) { if (httpUploadAPIRsp != null && httpUploadAPIRsp.getData() != null) { curUser.setHeadimg(httpUploadAPIRsp.getData().getUrl()); User user = new User(); user.setHeadimg(httpUploadAPIRsp.getData().getUrl()); UserDao userDao = OADaoManagerFactory.getUserDaoManger().getDataHelper(UserDao.class, User.class); userDao.update(user, null); toastInfor("修改用户头像成功!"); mHandler.sendMessage(mHandler.obtainMessage(LOAD_IMAGE_DATA, httpUploadAPIRsp)); } else { toastInfor("修改用户头像失败!"); } } @Override public void onFailed(int errorCode, String msg, String filePath) { toastInfor("修改用户头像失败!"); } }); } }/** * 拍照选择 * @author Administrator * */ public class PhotoMode extends BasePopupWindow implements OnClickListener{ private Context mContext; private LayoutInflater layoutInflater; private View v_publicComment; private OnPublicCommentClickListener mListener; private Button cancelBtn; private Button photoBtn; private Button albumBtn; private RelativeLayout backgroundLayout; public PhotoMode(Context context, View view, OnPublicCommentClickListener listener){ super(view); mContext = context; mListener = listener; initView(); } private void initView() { layoutInflater = LayoutInflater.from(mContext); v_publicComment = layoutInflater.inflate(R.layout.personal_photo_select, null); setContentView(v_publicComment); setPopupAttribute(mContext); cancelBtn = (Button)v_publicComment.findViewById(R.id.cancel_btn); cancelBtn.setOnClickListener(this); photoBtn = (Button)v_publicComment.findViewById(R.id.photo_btn); photoBtn.setOnClickListener(this); albumBtn = (Button)v_publicComment.findViewById(R.id.album_btn); albumBtn.setOnClickListener(this); backgroundLayout = (RelativeLayout)v_publicComment.findViewById(R.id.background); backgroundLayout.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.cancel_btn: PhotoMode.this.dismiss(); break; case R.id.photo_btn: mListener.onClick("1"); PhotoMode.this.dismiss(); break; case R.id.album_btn: mListener.onClick("2"); PhotoMode.this.dismiss(); break; case R.id.background: PhotoMode.this.dismiss(); break; default: break; } } /** * 回调接口 * @author Administrator * */ public interface OnPublicCommentClickListener{ void onClick(String comment); } } // personal_photo_select.xml<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/backview" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#11000000" > <RelativeLayout android:id="@+id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/photo_btn"></RelativeLayout> <Button android:id="@+id/photo_btn" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginLeft="35dp" android:layout_marginRight="35dp" android:layout_above="@+id/album_btn" android:layout_marginBottom="1dp" android:background="@drawable/personal_select_photo_button_style" android:text="相册" android:textColor="#333333" android:textSize="@dimen/campaign_textsize_normal" /> <Button android:id="@+id/album_btn" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginLeft="35dp" android:layout_marginRight="35dp" android:layout_above="@+id/cancel_btn" android:layout_marginBottom="15dp" android:background="@drawable/personal_select_photo_button_style" android:text="拍照" android:textColor="#333333" android:textSize="@dimen/campaign_textsize_normal" /> <Button android:id="@+id/cancel_btn" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginLeft="35dp" android:layout_marginRight="35dp" android:layout_alignParentBottom="true" android:layout_marginBottom="50dp" android:background="@drawable/personal_select_photo_button_style" android:text="取消" android:textColor="#333333" android:textSize="@dimen/campaign_textsize_normal" /> </RelativeLayout>
拍照和从相册选择图片
最新推荐文章于 2021-11-19 00:22:18 发布

2022

被折叠的 条评论
为什么被折叠?



