Git Product home page Git Product logo

imagepicker's Introduction

不再维护

ImagePicker

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

支持AndroidX(master分支),支持AndroidQ(feature分支),老版本见dev分支。

注意:若没有用到AndroidX,则不支持targetSdk>=29

注意:Q版本的资源获取是通过ImageItem的uri,其它版本通过path

注意:最新依赖库更新于2020-05-26

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


//老版本,非androidx,targetsdk<29:

api 'com.cysion:ImagePicker:1.2.0'

-----------

若使用androidx:
    //target sdk <29,建议这样添加依赖:

    api 'com.cysion:ImagePicker:1.2.0.x'

    //若targetsdk>=29 ,则需要这样添加依赖:
    api 'com.cysion:ImagePicker:1.2.1.Q'
注意,Android Q 对存储框架有较大改动,最主要的是无法通过文件路径获得非*应用专有文件*。
在本版本库中,也完全放弃了文件路径的方式,全部是以Uri的方式提供文件访问。



演示

imageimage

1.用法

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

//老版本至此不再维护
api 'com.cysion:ImagePicker:1.2.0'

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

---

//若出现Failed to resolve: com.github.chrisbanes:PhotoView的问题,
//则应在项目的build.gradle添加如下:
 maven{url"https://jitpack.io"}

2.功能和参数含义

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

3.代码参考

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

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

picasso 2.52版本有bug

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() {
        //这里是清除缓存的方法,根据需要自己实现
    }
}


Android Q 版本,废弃了文件路径访问方式:


public class PicassoImageLoader implements ImageLoader {

    @Override
    public void displayImage(Activity activity, Uri aUri, ImageView imageView, int width, int height) {
        Picasso.get()//
                .load(aUri)//
                .placeholder(R.drawable.ic_default_image)//
                .error(R.drawable.ic_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);   //裁剪框的宽度,仅对crop有效,对isFreeCrop无效
    imagePicker.setFocusHeight(800);  //裁剪框的高度,仅对crop有效,对isFreeCrop无效
    imagePicker.setOutPutX(1000);//保存文件的宽度。单位像素,仅对crop有效,对isFreeCrop无效
    imagePicker.setOutPutY(1000);//保存文件的高度。单位像素,仅对crop有效,对isFreeCrop无效
    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.2.1

  • 修复Q版本加载图片时潜在的空指针
  • 对于【androidX + targetsdk>=29】,这样依赖api 'com.cysion:ImagePicker:1.2.1.Q'

V1.2.0

  • 统一library版本;老版本1.2.0; andx:1.2.0.x; targetsdk >= 29:1.2.0.Q
  • 优化配置裁剪图片存储逻辑;

V1.0.9.Q

  • 依赖方式改为 api 'com.cysion:ImagePicker:1.0.9.Q'
  • 适配Android Q,完全以Uri的方式获得图片,废弃文件路径;
  • 增加原图选项;

V1.0.8

  • 依赖方式改为 api 'com.cysion:ImagePicker:1.0.8'
  • 修复没有图片时不显示相机icon的bug;

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.

imagepicker's People

Contributors

491138002 avatar cysionliu avatar even201314 avatar jeasonlzy avatar lqiz avatar nanchen2251 avatar qsyw avatar xingty avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

imagepicker's Issues

咨询一个与项目有点关系的问题

之前我的项目我用了这个项目的前身com.lzy.imagepicker
调用摄像头没有发生过异常
现在我有一个特别小的项目 只是简单的调用摄像头拍照 所以没有引用你的库
问题
在我的项目中 只是简单的拍照+图片上传 在调用摄像头的过程中 有些手机机型抱了crash 也在网上查了许久 但是还是没有解决 请问一下这个问题是怎么导致的呢 谢谢🙏

  • crash

# main(1)

java.lang.SecurityException

Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.huawei.camera/.ThirdCamera clip={text/uri-list U:content://com.chs.cxrbusinessclient.fileprovider/external_storage_root/Android/data/com.chs.cxrbusinessclient/cache/MyPhoto/20200327152211.png} (has extras) } from ProcessRecord{cb7fbf7 13570:com.chs.cxrbusinessclient/u0a176} (pid=13570, uid=10176) with revoked permission android.permission.CAMERA
  • 项目简单代码
// 调用摄像头拍照
case R.id.iv_store_photo:
                //权限没有授权,进入授权界面
                if (mPermissionsChecker.judgePermissions(PERMISSIONS)) {
                    ActivityCompat.requestPermissions(this, PERMISSIONS, TAKEPHOTO_REQUEST_CODE);
                } else {
                    takePhotoMethod();
                }
                break;

// 权限申请回调
onRequestPermissionsResult(){
 if (requestCode == TAKEPHOTO_REQUEST_CODE && hasAllPermissionsGranted(grantResults)) {
            takePhotoMethod();
        } else if (requestCode == TAKEPHOTO_REQUEST_CODE) {
            ToastUtils.showShortToast("请手动开启app相机和存储权限");
            goIntentSetting();
        }
}

// 调起摄像头拍照
 String fileName = "";
    private void takePhotoMethod() {
        fileName = CameraPhotoUtils.getPhotoFileName(this);

        // new一个File用来存放拍摄到的照片
        File imageFile =new File(fileName);
        // 如果存在就删了重新创建
        try {
            if (imageFile.exists()) {
                imageFile.delete();
            }
            imageFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 将存储地址转化成uri对象
        if (Build.VERSION.SDK_INT >= 24) {
            photoUri = FileProvider.getUriForFile(ApplyBusinessActivity.this, ApplyBusinessActivity.this.getApplicationContext().getPackageName() + ".fileprovider", imageFile);
        } else {
            photoUri = Uri.fromFile(imageFile);
        }
        // 设置打开照相的Intent
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        // 设置相片的输出uri为刚才转化的imageUri
        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
        // 开启相机程序,设置requestCode为TOKE_PHOTO
        startActivityForResult(intent, TAKE_PHOTO);
    }

 /**************相关方法*******************/
 // 含有全部的权限
    private boolean hasAllPermissionsGranted(int[] grantResults) {
        for (int grantResult : grantResults) {
            if (grantResult == PackageManager.PERMISSION_DENIED) {
                return false;
            }
        }
        return true;
    }
// mPermissionsChecker.judgePermissions()
   /**
     * 判断权限
     */
    public boolean judgePermissions(String... permissions) {
        for (String permission : permissions) {
            if (lacksPermission(permission)) {
                return true;
            }
        }
        return false;
    }
    // 判断是否缺少权限
    private boolean lacksPermission(String permission) {
        return ContextCompat.checkSelfPermission(mContext, permission) ==
                PackageManager.PERMISSION_DENIED;
    }

关于自定义固定比例问题

首先说明:我说的自定义比例是自定义固定比例,不是FREE模式下的用户随意变更的比例
新的FreeCrop内有CUSTOM的参数,但是想要自定义宽高比必须重写裁剪的类。为什么不判断当我传的CropMode是CUSTOM的时候,就调取FocusWidth和FocusHeight的宽高比呢?

单选进入剪切页面报错

多选没问题,查看大图也不行
大图显示出来了,然后直接崩溃

日志:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.locojoy.libros_books.BookApplication$1)
at android.os.Parcel.writeSerializable(Parcel.java:1714)
at android.os.Parcel.writeValue(Parcel.java:1662)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:875)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1583)
at android.os.Bundle.writeToParcel(Bundle.java:1233)
at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3986)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)
at android.os.Handler.handleCallback(Handler.java:891)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:7470)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
Caused by: java.io.NotSerializableException: com.locojoy.libros_books.BookApplication
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at android.os.Parcel.writeSerializable(Parcel.java:1709)
at android.os.Parcel.writeValue(Parcel.java:1662) 
at android.os.Parcel.writeArrayMapInternal(Parcel.java:875) 
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1583) 
at android.os.Bundle.writeToParcel(Bundle.java:1233) 
at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3986) 
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144) 
at android.os.Handler.handleCallback(Handler.java:891) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:207) 
at android.app.ActivityThread.main(ActivityThread.java:7470) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958) 

加载到自己的demo中,报Parcelable encountered IOException writing serializable object

在gridview中调起拍照,老是报这个错误 -Parcelable encountered IOException writing serializable object,发现是ImageGridActivity这个崩溃了,怎么解决?

日志如下
2019-06-10 14:19:44.151 7037-7037/com.exmaple.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xiumei.app, PID: 7037
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.exmaple.app.ui.match.EnrollInActivity$EnrollImageLoader)
at android.os.Parcel.writeSerializable(Parcel.java:1717)
at android.os.Parcel.writeValue(Parcel.java:1665)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:878)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1588)
at android.os.Bundle.writeToParcel(Bundle.java:1233)
at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3954)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6815)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: java.io.NotSerializableException: com.exmaple.app.ui.match.EnrollInActivity
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at android.os.Parcel.writeSerializable(Parcel.java:1712)
at android.os.Parcel.writeValue(Parcel.java:1665) 
at android.os.Parcel.writeArrayMapInternal(Parcel.java:878) 
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1588) 
at android.os.Bundle.writeToParcel(Bundle.java:1233) 
at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3954) 
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144) 
at android.os.Handler.handleCallback(Handler.java:873) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:201) 
at android.app.ActivityThread.main(ActivityThread.java:6815) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 

拍照裁剪出现问题

1.先选择相册里面的一张图片,进入到裁剪页面,点击返回到相册列表
2.再拍照确认后,自动调整到裁剪图片页面
3.此时展示裁剪图片,还是之前选择相册里面选择的那张,不是刚才拍照的图片

源码

你好!请问 1.2.0.Q的源码在哪

AndroidX 启动异常

.NoSuchFieldError: No field mActive of type Landroid/util/SparseArray; in class Landroidx/fragment/app/FragmentManagerImpl; or its superclasses (declaration of 'androidx.fragment.app.FragmentManagerImpl' appears

java.lang.NullPointerException 这个错误没人遇到过?

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.szysky.customize.siv.SImageView.getTag()' on a null object reference at com.szysky.customize.siv.ImageLoader$2.handleMessage(ImageLoader.java:475)

版本:

api 'com.cysion:ImagePicker:1.0.7'

OOM 选择了5张照片之后点击上传。

java.lang.OutOfMemoryError: Failed to allocate a 120926912 byte allocation with 25165824 free bytes and 69MB until OOM, max allowed footprint 489109392, growth limit 536870912

判断摄像头是否存在

判断摄像头是否存在为什么使用的是PackageManager.FEATURE_CAMERA 而不是PackageManager.FEATURE_CAMERA_ANY
FEATURE_CAMERA: The device has a camera facing away from the screen(这台设备有一个摄像头,对着屏幕)
FEATURE_CAMERA_ANY: The device has at least one camera pointing in some direction, or can support an external camera being connected to it(设备至少有一个指向某个方向的摄像机,或者可以支持连接到它的外部摄像机)

NullPointerException

1.0.6版本 出现空指针
java.lang.NullPointerException
Attempt to read from field 'java.lang.String com.lzy.imagepicker.bean.ImageItem.path' on a null object reference
com.lzy.imagepicker.ui.ImageGridActivity.onImageSelected(ImageGridActivity.java:327)

设备机型
华为 HMA AL00
系统版本
Android 9,level 28
ROM
HuaWei/EMOTION
CPU架构
armeabi

期望新增功能~请查看~

选中图片时,目前是打勾,是否考虑添加阿拉伯数字排序呢。
选中图片时,能有一个自定义的限制集吗?目前只有数量超限有校验,
可以新增,文件大小校验,图片后缀格式校验,尺寸校验等,返回是否允许选中。
目前的项目中 如果不使用裁剪,好像还没有图片压缩。

完全仿微信Demo 选择图片页面bug

点击+号弹出菜单之后,选择拍照,可以选择拍还是直接返回,不过这个问题这两种情况都会存在。
问题:再次点击+号 选择相册,然后弹出选择相册页面title栏 btnOK不显示,图片上选择框也不显示..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.