该功能用到了Apache的开源项目simplecropimage.
下面代码中CropImage类为SimpleCropImage中的类,该类需要在Manifest中进行注册。simplecropimage用到的依赖类在附件中。
直接上代码:
下面代码中CropImage类为SimpleCropImage中的类,该类需要在Manifest中进行注册。simplecropimage用到的依赖类在附件中。
直接上代码:
/** 打开相册(第一步)*/ private static final String IMAGE_UNSPECIFIED = "image/*"; private void openPhotos() { Intent intent = new Intent(Intent.ACTION_PICK); // intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); startActivityForResult(intent, REQUEST_PHOTOS); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CUTRESULT: dealCutResult(resultCode, data); break; case REQUEST_PHOTOS: dealPhotosResult(resultCode, data); break; } private void dealPhotosResult(int resultCode, Intent data) { if (Activity.RESULT_OK == resultCode) { if (data != null) { // 从相册获取照片uri startPhotoCut(data.getData()); } } else { if(GlobleParams.isEnglish){ shortToast("Upload canceled"); }else{ shortToast("您已经取消了上传操作"); } } } /**开始裁剪(第二步)*/ public void startPhotoCut(Uri uri) { String realPathFromURI = getRealPathFromURI(uri); if(realPathFromURI == null){ return; } File file = new File(realPathFromURI); Intent intent = new Intent(App.getInstance(), CropImage.class); // tell CropImage activity to look for image to crop intent.putExtra(CropImage.IMAGE_PATH, file.getAbsolutePath()); // allow CropImage activity to rescale image intent.putExtra(CropImage.SCALE, true); // if the aspect ratio is fixed to ratio 3/2 intent.putExtra(CropImage.ASPECT_X, 0); intent.putExtra(CropImage.ASPECT_Y, 0); // start activity CropImage with certain request code and listen // for result startActivityForResult(intent, REQUEST_CUTRESULT); } private void dealCutResult(int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { String path = data.getStringExtra(CropImage.IMAGE_PATH); // if nothing received if (path == null) {return;} uploadPhoto(path); } else { if(GlobleParams.isEnglish){ shortToast("Upload canceled"); }else{ shortToast("您已经取消了上传操作"); } } } /**开始上传(第三步)*/ public void uploadPhoto(String path) { File file = new File(path); MyLog.i("wmm", "file path" + file.getAbsolutePath() + "size " + file.getName() + " " + file.length()); final UserInfo user = App.getInstance().getUser(); MyLog.i("wmm", user.toString()); Bitmap photo = BitmapFactory.decodeFile(file.getPath()); iv_head_icon.setImageBitmap (BitmapUtil.getRoundedCornerBitmap(photo)); if (user != null) { Api.uploadavatar(App.getInstance(), user.username, user.password, path, new DefaultResponsehandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { super.onSuccess(statusCode, headers, response); MyLog.i("wmm", "uploadPhoto onSuccess " + response.toString()); Api.loadDrawable(user.head_icon + "?time=" + System.currentTimeMillis(), iv_head_icon, R.drawable.default_head_icon); // Picasso.with(App.getInstance()).load(user.head_icon).skipMemoryCache().placeholder(R.drawable.default_head_icon).into(iv_head_icon); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); MyLog.i("wmm", "uploadPhoto onFailure " + responseString.toString()); } @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { super.onSuccess(statusCode, headers, response); MyLog.i("wmm", "uploadPhoto onSuccess 1" + response.toString()); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { super.onSuccess(statusCode, headers, responseString); MyLog.i("wmm", "uploadPhoto onSuccess 2" + responseString.toString()); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); MyLog.i("wmm", "uploadPhoto onFailure 1 " + statusCode + " " + throwable.getMessage()); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); MyLog.i("wmm", "uploadPhoto onFailure 2 " + errorResponse.toString()); } @Override public void onFinish() { super.onFinish(); MyLog.i("wmm", "upload onFinish"); } @Override public void onStart() { super.onStart(); MyLog.i("wmm", "upload onStart"); } }); } } public String getRealPathFromURI(Uri contentUri) { String res = null; String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, null, null, null); if (cursor != null && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); res = cursor.getString(column_index); } if(cursor != null){ cursor.close(); } return res; }
- simplecropimage.zip (22.7 KB)
- 下载次数: 0
发表评论
-
Android开发判断SQLite数据库中某个表是否存在
2016-02-16 09:22 1775直接上方法: public boolean tabIs ... -
CSS中图片宽度适应手机屏幕
2015-12-01 09:56 618在Androind应用中如果用到JS加载内容,图片的样式适配手 ... -
Android 获得屏幕的宽高
2015-11-30 15:51 552private DisplayMetrics getWith ... -
解决在某些型号华为手机上用JS加载的平滑图不能滑动的问题
2015-11-19 16:18 1083今天解决了一个Js的问题。心情倍儿爽,特此纪念下 。 具体是: ... -
new Dialog()的空指针问题
2015-11-10 15:47 767Dialog dialog = new Dialog(cont ... -
Monkey 测试命令之一行命令入手Monkey
2015-11-10 11:27 1198首先在Android Studio 中打开Terminal终端 ... -
adb列出分组权限与撤销权限的命令
2015-11-04 08:36 1931列出权限 adb shell pm list permissi ... -
AS 学习笔记之Error:Execution failed for task ':dynamicgrid:packageReleaseResources'.
2015-06-29 17:22 998今天往AS中导项目时遇到如下错误Error:Execution ... -
AndroidStudio中的DDMS连不上真机
2015-06-18 14:57 1546今天换了新电脑,重装了AndroidStudio,发现DDMS ... -
Android解决OOM问题的一个技巧
2015-03-05 10:32 929最近公司做的项目中几乎全是高分辨的大图,刚开发完后加载几张图片 ...
相关推荐
总之,实现“creator调用android相机相册并裁剪后上传下载”的功能,涉及到Android的权限管理、Intent交互、图片处理、文件操作以及网络请求等多个技术点,通过合理的代码组织和设计,可以构建出稳定可靠的图片处理...
以上就是Android中调用系统相机拍照、从相册选择图片以及裁剪图片的基本实现。在实际开发中,还需要考虑权限管理(如请求存储权限)、图片压缩、异步处理等细节问题,以确保功能的完整性和用户体验。同时,由于...
这就是在Android中调用系统相机和相册并裁剪图片的基本流程。实际开发中,还需要考虑权限管理、图片质量、裁剪比例自定义、兼容不同Android版本等问题。`testDemo02`项目应该包含了这些功能的具体实现,你可以通过...
在Android开发中,有时我们需要实现一个功能,让用户能够选择图片并进行裁剪,然后将裁剪后的图片保存到设备上。这个过程涉及到Android系统的图片选择API、图片裁剪API以及文件操作。以下是对这个功能的详细讲解。 ...
在Android应用开发中,与用户交互获取图片是常见的需求,比如使用系统相册选择图片、拍照后裁剪以及对图片进行压缩。在Android 7.0(API Level 24)及以上版本,由于权限管理的加强,这些操作变得更加复杂,需要处理...
"拍照和相册选取图片并裁剪得到路径"这个功能是移动应用中常见的一个模块,涉及到Android和iOS系统的多媒体处理、权限管理以及网络上传等多个知识点。 1. **多媒体权限管理**: 在Android 6.0(API级别23)及以上...
本文实例讲述了Android编程实现调用系统图库与裁剪图片功能。分享给大家供大家参考,具体如下: 在Android开发中,调用系统图库和裁剪照片是很常见的需求。相对于自己实现这种功能,直接调用系统具有诸多优点,如...
在Android开发中,涉及到相机拍照、图片存储、调用相册、图片旋转和裁剪等是常见的功能需求。这些功能的实现涉及到多个Android系统API的使用,包括相机API、文件I/O、媒体库以及图像处理库。下面我们将详细探讨这些...
这个名为"Android Studio的项目,实现拍照及相册自定义裁剪"的实践,是Android应用开发中的一个重要环节,它涵盖了Android设备上的相机使用、图片选择以及自定义图片裁剪等功能。下面将详细阐述这些关键知识点。 1....
在Android平台上,开发一款应用涉及到拍照、选择相册、裁剪和上传照片的功能,需要对Android系统的多媒体处理、权限管理、Intent机制以及网络上传等有深入的理解。以下将详细阐述这些知识点。 一、Android相机API ...
【TakePicture】项目分为两大部分,分别从不同开发场景出发。 随着市场上不同版本、机型手机的出现,老项目迭代维护成本高。...2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。
在移动应用开发中,用户经常需要上传或者选择头像、照片等图像,这时就需要调用设备的相机或相册功能,并且可能还需要进行图片的裁剪操作以满足特定尺寸的需求。本文将详细介绍如何在Android平台上实现这个功能,...
在Android应用开发中,用户经常需要能够选择图片...通过以上步骤,你可以在Android应用中实现完整的拍照、选择相册图片并裁剪的功能。记得在实际开发中,要处理可能出现的各种异常和用户反馈,以提供良好的用户体验。
在Android应用开发中,涉及到用户交互的图像处理功能是非常常见的,比如拍照、图片裁剪以及调用系统相册。这个项目源码是基于Android Studio的一个示例,它演示了如何实现这些功能。以下是对这些知识点的详细解释: ...
至此,我们就实现了在Android应用中调用相机拍照、从相册选取照片以及对图片进行裁剪的功能。`readme.txt`文件可能是对这个过程的简单说明或使用步骤,帮助开发者更好地理解代码实现。 在实际项目中,可以根据需求...
在Android开发中,用户可能需要从手机的相机或者相册中选择图片,并进行裁剪以适应特定的需求。本文将详细讲解如何实现这一功能,提供一个精简且完整的解决方案。 首先,我们需要添加必要的权限到AndroidManifest....
总的来说,Android Studio中的图片选择上传功能涉及到了Android的Intent机制、第三方库的使用、网络请求、文件操作以及权限管理等多个方面。理解并掌握这些知识点,对于开发出用户体验良好的Android应用至关重要。
在Android开发中,获取用户设备上的图片以及进行裁剪是一项常见的功能,这通常涉及到相机应用接口的调用和系统相册的访问。本教程将详细讲解如何实现这一过程。 首先,我们要了解Android中的Intent机制,它是应用...