Giter Site home page Giter Site logo

pictureselector's Introduction

PictureSelector

Android 图片选择器(仿 IOS 图片选择控件)

效果图

效果图.jpg

功能特点

  • 支持通过拍照获取图片
  • 支持通过相册获取图片
  • 支持图片是否裁剪两种场景
  • 支持仿 IOS 底部弹出选择菜单 ActionSheet 效果
  • 适配 Android Q 版本

使用

Step 1. 添加 JitPack 仓库

在项目的 build.gradle 添加 JitPack 仓库

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

Step 2. 添加依赖

在需要使用的 module 中添加依赖
注意:从 2.0.0 版本开始,项目迁移到 AndroidX。如果你的项目还未迁移到 AndroidX,可以使用 1.2.0 版本。

dependencies {
	implementation 'com.github.wildma:PictureSelector:2.1.0'
}

Step 3. 拍照或者从相册选择图片

使用场景:

  • 不裁剪
PictureSelector
        .create(MainActivity.this, PictureSelector.SELECT_REQUEST_CODE)
        .selectPicture(false);
  • 自由裁剪
PictureSelector
        .create(MainActivity.this, PictureSelector.SELECT_REQUEST_CODE)
        .selectPicture(true);
  • 指定宽高及宽高比例裁剪
PictureSelector
        .create(MainActivity.this, PictureSelector.SELECT_REQUEST_CODE)
        .selectPicture(true, 200, 200, 1, 1);

参数解释:

  • create():参数一是上下文,在 activity 中传 activity.this,在 fragment 中传 fragment.this。参数二是请求码,用于结果回调 onActivityResult() 中判断。
  • selectPicture():参数分别为是否裁剪、裁剪后图片的宽(单位 px)、裁剪后图片的高、宽比例、高比例。

Step 4. 获取图片地址进行显示

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        /*结果回调*/
        if (requestCode == PictureSelector.SELECT_REQUEST_CODE) {
            if (data != null) {
                PictureBean pictureBean = data.getParcelableExtra(PictureSelector.PICTURE_RESULT);
                if (pictureBean.isCut()) {
                    mIvImage.setImageBitmap(BitmapFactory.decodeFile(pictureBean.getPath()));
                } else {
                    mIvImage.setImageURI(pictureBean.getUri());
                }

                //使用 Glide 加载图片
                /*Glide.with(this)
                        .load(pictureBean.isCut() ? pictureBean.getPath() : pictureBean.getUri())
                        .apply(RequestOptions.centerCropTransform()).into(mIvImage);*/
            }
        }
    }

清理缓存

实际开发中将图片上传到服务器成功后需要删除全部缓存图片(即裁剪后的无用图片),调用如下方法即可:

    FileUtils.deleteAllCacheImage(this);

注意

如果你没有使用依赖的方式,而是直接拷贝源码到你的项目中使用。那么需要自己适配 Android 7.0 导致的 FileUriExposedException 异常,具体方式如下:

将 PictureSelectUtils 中的 authority 与你项目中 AndroidManifest.xml 下的 authority 保持一致。 例如 AndroidManifest.xml 下的 authority 为:

android:authorities="myAuthority"

则需要修改 PictureSelectUtils 中的 authority( 这一行) 为:

String authority = "myAuthority";

详细介绍请看文章:一个非常好用的 Android 图片选择框架

pictureselector's People

Contributors

wildma 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  avatar

pictureselector's Issues

回调有问题

在fragment中拍照回掉,回到Activity上加载到第一个fragment了,我传的是当前fragment.this
手机三星5.0

android Q(10)系统不适配

android Q(10)系统有文件权限的调整,之前的代码不能在此系统创建和修改文件,导致不能选择图片

java.lang.NullPointerException:Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference

java.lang.NullPointerException:Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference
5
com.wildma.pictureselector.PictureSelectUtils.java.lang.String onActivityResult(android.app.Activity,int,int,android.content.Intent,boolean,int,int,int,int)(SourceFile:8)
6
com.wildma.pictureselector.PictureSelectActivity.void onActivityResult(int,int,android.content.Intent)(SourceFile:2)

你好

加下 qq 478104175 可以吗 有问题想跟你沟通

fileProvider能不能给个自定义设置的接口

如题,项目的另外一个库里也设置的fileProvider,冲突了,我的想法是:在PictureSelectUtils里加一个可以改 fileProvider字段的方法,这样我在项目的清单里自定义fileProvider时改成对应的名字,就可以不用扒库了。。。 不知道这个想法是否可行,盼复! 419360214 q

库更新问题

库每次更新后,在as必须要手动改最新版本号嘛。经常出问题

ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not download PictureSelector.aar (com.github.wildma:PictureSelector:1.1.4)
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not download PictureSelector.aar (com.github.wildma:PictureSelector:1.1.4)
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not download PictureSelector.aar (com.github.wildma:PictureSelector:1.1.4)
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@release/compileClasspath': Could not download PictureSelector.aar (com.github.wildma:PictureSelector:1.1.4)
Show Details
Affected Modules: app

ERROR: Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not download PictureSelector.aar (com.github.wildma:PictureSelector:1.1.4)
Show Details
Affected Modules: app

能不能增加多语言

老哥,库很好用,提两个想法,请考虑下
能不能增加几种常用国际化语言,中,英,繁,韩,日,
另外 能不能增加直接调用拍照的方法,不弹出选择
谢谢

不能重新获取新的图片

8.0手机上,只能获取第一次的图片。后面不管是拍照还是从图库选择,都只能拿到最先获取的那张图片

功能

最好能自定义裁剪图片保存路径
不行的话起码每张裁剪图片的路径不能一样
可以的话可以完善一下

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.