1 Star 3 Fork 1

CodeApe/ImagePicker

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

ImagePicker

Android自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪 、旋转等功能。

ImagePickerfork过来,维护方向为样式设置方面的完善

新版本支持AndroidX(dev分支是非androidx版本)

原项目作者自2017.9就跑了,留下一些bug和待完善的一点功能,本项目fork过来继续,底部有版本更新说明

新版依赖方式有些变化,并不影响代码中的导入关系

对于Android Studio(建议用3.0版本+)的用户,可以选择添加:

 api 'com.cysion:ImagePicker:1.0.7'

 //若使用androidx,则需要这样添加依赖:
api 'com.cysion:ImagePicker:1.0.7.x'

演示

imageimage

1.用法

对于Android Studio(建议用3.0版本+)的用户,可以选择添加:

api 'com.cysion:ImagePicker:1.0.7'

//若使用androidx,则需要这样添加依赖:
api 'com.cysion:ImagePicker:1.0.7.x'
---
//若出现Failed to resolve: com.github.chrisbanes:PhotoView的问题,
//则应在项目的build.gradle添加如下:
 maven{url"https://jitpack.io"}
---
//若出现依赖重复问题,可以这样;
api('com.cysion:ImagePicker:1.0.7'){
   exclude group: 'com.android.support'
}

2.功能和参数含义

配置参数 参数含义
multiMode 图片选着模式,单选/多选
selectLimit 多选限制数量,默认为9
showCamera 选择照片时是否显示拍照按钮
crop 是否允许裁剪(单选有效)
isFreeCrop 是否允许自由裁剪(单选有效,默认FREE,自由比例)新版本添加,推荐使用,会覆盖crop
style 有裁剪时,裁剪框是矩形还是圆形
focusWidth 矩形裁剪框宽度(圆形自动取宽高最小值)
focusHeight 矩形裁剪框高度(圆形自动取宽高最小值)
outPutX 裁剪后需要保存的图片宽度
outPutY 裁剪后需要保存的图片高度
isSaveRectangle 裁剪后的图片是按矩形区域保存还是裁剪框的形状,例如圆形裁剪的时候,该参数给true,那么保存的图片是矩形区域,如果该参数给fale,保存的图片是圆形区域
imageLoader 需要使用的图片加载器,自需要实现ImageLoader接口即可,推荐glide

3.代码参考

更多使用,请下载demo参看源代码

  1. 首先你需要继承 com.lzy.imagepicker.loader.ImageLoader 这个接口,实现其中的方法,比如以下代码是使用 Picasso 三方加载库实现的
public class PicassoImageLoader implements ImageLoader {

    @Override
    public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) {
        Picasso.with(activity)//
                   .load(Uri.fromFile(new File(path)))//
                .placeholder(R.mipmap.default_image)//
                .error(R.mipmap.default_image)//
                .resize(width, height)//
                .centerInside()//
                .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)//
                .into(imageView);
    }

    @Override
    public void clearMemoryCache() {
        //这里是清除缓存的方法,根据需要自己实现
    }
}
  1. 然后配置图片选择器,一般在Application初始化配置一次就可以,这里就需要将上面的图片加载器设置进来,其余的配置根据需要设置
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_picker);
    
    ImagePicker imagePicker = ImagePicker.getInstance();
    imagePicker.setImageLoader(new PicassoImageLoader());   //设置图片加载器
    imagePicker.setShowCamera(true);  //显示拍照按钮
    imagePicker.setCrop(true);        //允许裁剪(单选才有效)
    imagePicker.setFreeCrop(true, FreeCropImageView.CropMode.FREE);//新版添加,自由裁剪,优先于setCrop
    imagePicker.setSaveRectangle(true); //是否按矩形区域保存
    imagePicker.setSelectLimit(9);    //选中数量限制
    imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状
    imagePicker.setFocusWidth(800);   //裁剪框的宽度。单位像素(圆形自动取宽高最小值)
    imagePicker.setFocusHeight(800);  //裁剪框的高度。单位像素(圆形自动取宽高最小值)
    imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素
    imagePicker.setOutPutY(1000);//保存文件的高度。单位像素
    imagePicker.setIToaster(this, new InnerToaster.IToaster());//设置吐司代理,保持lib与app中吐司风格一致
}
  1. 以上配置完成后,在适当的方法中开启相册,例如点击按钮时
public void onClick(View v) {
        Intent intent = new Intent(this, ImageGridActivity.class);
        startActivityForResult(intent, IMAGE_PICKER);  
    }
}
  1. 如果你想直接调用相机

//1.0.5版本加入了更明确的权限申请,解决原程序直接打开拍照可能出现没数据的情况

Intent intent = new Intent(this, ImageGridActivity.class);
intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否是直接打开相机
startActivityForResult(intent, REQUEST_CODE_SELECT);

//若拍照之后需要裁剪,则在使用前,需要关闭多选模式,支持裁剪

ImagePicker.getInstance().setMultiMode(false);
ImagePicker.getInstance().setFreeCrop(true, FreeCropImageView.CropMode.FREE);
...

  1. 重写onActivityResult方法,回调结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
        if (data != null && requestCode == IMAGE_PICKER) {
            ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
            MyAdapter adapter = new MyAdapter(images);
            gridView.setAdapter(adapter);
        } else {
            Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();
        }
    }
}

更新日志

V1.0.7

  • 依赖方式改为 api 'com.cysion:ImagePicker:1.0.7'
  • 修复单选 裁剪返回--拍照--裁剪的图片bug;
  • 加入androidx支持,依赖版本为api 'com.cysion:ImagePicker:1.0.7.x'

V1.0.6

  • 依赖方式改为 api 'com.cysion:ImagePicker:1.0.6'
  • 修复在预览页面,点击删除出现对话框时的中文乱码问题

V1.0.5

  • 依赖方式改为 api 'com.cysion:ImagePicker:1.0.5'
  • 加入了更明确的权限申请,解决原程序直接打开拍照可能出现没数据的情况
  • 增加 点击直接拍照时,选择单选模式,并支持裁剪的说明

V1.0.1

  • 依赖方式改为 api 'com.cysion:ImagePicker:1.0.1'
  • 支持中英文下的多语言支持(若翻译不符合,可通过覆盖res-string的方式);
  • 增加无摄像头设备拍照时的校验;
  • 增加吐司注入,保持lib与app中吐司风格一致;
  • 解决图片裁剪时点击取消,返回后列表间隔变大的bug;
  • 加入一种新的裁剪方式--自由裁剪,可以按任意比例拖动裁剪;
  • 修复使用原裁剪时,取消后会多选一张图片的bug;

V1.0.0

  • 新作者重新发布,依赖方式改为 api 'com.cysion:ImagePicker:1.0.0'
  • 更新至Android sdk 27;
  • 修复loader生命周期造成的index问题,即图片列表页闪退和黑屏问题(预览返回和桌面重回场景)

V 0.6.1

V 0.6.0

V 0.5.5

  • [修复]选择图页面进入预览取消选择或者选择后返回列表不更新的问题;
  • [修复]6.0动态权限可能导致崩溃的bug;

V 0.5.4

  • [修复]部分内存泄漏问题;
  • [修复]新增显示已选中图片的调用方法:详情请查看demo首页的ImagePickerActivity;如果不需要此功能,则WxDemoActivity可能是你想要的。

V 0.5.3

  • [修复]矫正图片旋转导致的oom;
  • [修复]部分手机TitleBar和状态栏重复的问题;

V 0.5.1

  • [更正] 由于原图功能其实还没有做,所以本版本隐去了原图的显示。以免用户误解原图问题。
  • [修复] 使用RecyclerView替换GridView解决改变选中状态全局刷新的问题;
  • [提示] 虽然本次解决了全局刷新,但是如果使用的是Picasso依然会出现重新加载一张图片的问题,这是Picasso自己的问题,建议使用Glide框架。

V 0.5.0

  • [修复] 解决provider冲突问题;

V 0.4.8

  • [修复] 解决demo中直接呼起相机并裁剪不会返回数据的bug,不需要这个功能的可以不更新;

V 0.4.7

  • [新增] 新增可直接调起相机的功能;
  • [修复] 解决可能和主项目provider冲突的潜在问题;
  • [修复] 点击图片预览空指针崩溃问题;
  • [修复] 使用Intent传值限制导致的崩溃问题;
  • [修复] 部分机型拍照后图片旋转问题;
  • [修复] 更改选择框图片背景为灰色,以免白色图看不清。

V 0.3.5

  • [新增] 提供直接调起相机的方式,并可直接设置牌照是否裁剪;
  • [修复] Android7.0设备调系统相机直接崩溃的问题;
  • [注意] 如果出现 java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported,请直接clean再运行即可。

Licenses

 Copyright 2016 jeasonlzy(廖子尧),2019 CysionLiu

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2016 jeasonlzy(廖子尧) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

Android自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪 、旋转等功能。 展开 收起
Android
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Android
1
https://gitee.com/CodeApeGroup/ImagePicker.git
git@gitee.com:CodeApeGroup/ImagePicker.git
CodeApeGroup
ImagePicker
ImagePicker
master

搜索帮助