GalleryPick 圖片選擇器

GalleryPick 圖片選擇器

GalleryPick 是 Android 自定義相冊,實現了拍照、圖片選擇(單選/多選)、裁剪、ImageLoader無綁定 任由開發者選擇java

各位的 star 就是對我最大的支持。

GitHub 項目地址

下載 APK

圖片展現

功能多選頁面
文件夾選擇截圖

Gif展現

單選多選
截圖

GalleryPick 功能

  • UI重改android

  • 全部功能可配置git

  • 解決OOM狀況github

  • 圖片多選、單選app

  • ImageLoader 無綁定,任由開發者選擇框架

  • 可直接開啓相機maven

  • 可裁剪、可旋轉ide

版本說明

1.2.1

  • 優化部分代碼。字體

使用說明

步驟一:

本開源代碼以關聯到 jitpack 網站 ,使用者能夠用如下幾種方式進行抓取。gradle

經過Gradle使用

Projectbuild.gradle 中 添加:

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

appbuild.gradle 中 添加:

dependencies {
      compile 'com.github.YancyYe:GalleryPick:1.2.1'
}

經過maven使用

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>
<dependency>
    <groupId>com.github.YancyYe</groupId>
    <artifactId>GalleryPick</artifactId>
    <version>1.2.1</version>
</dependency>

步驟二:建立 圖片加載器 (其中能夠按照 喜愛 使用不一樣的 第三方圖片)

示例:

使用Glide加載

使用Picasso加載

使用Fresco加載

步驟三:設置 Provider

請在 app 中的 AndroidManifest 中的application標籤下添加

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.yancy.gallerypickdemo.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

provider 中的 authorities 能夠本身定義爲 provider所在的包的名字+provider自己定義的名稱 (若是一個設備中出現兩個一樣的authorities會出現沒法安裝的狀況)

res 中建立xml文件夾,在其中建立文件。文件名本身定義。demo中定義了filepaths.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <external-path
            name="external"
            path="" />
        <files-path
            name="files"
            path="" />
        <cache-path
            name="cache"
            path="" />
    </paths>
</resources>

FileProvider 中設置的內容我就不介紹了,網上一搜一大片。

最後,在設置GalleryConfig 的時候,設置provider,內容爲你以前在AndroidManifest中的provider中的authorities設置的值。demo中爲:com.yancy.gallerypickdemo.fileprovider

GalleryConfig代碼示例

AndroidManifest代碼示例

filepaths.xml代碼示例

使用方法參考

步驟四:申請權限

代碼示例:
在點擊開啓相冊按鈕時:

if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG, "須要受權 ");
            if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                Log.i(TAG, "拒絕過了");
                // 提示用戶若是想要正常使用,要手動去設置中受權。
                Toast.makeText(mContext, "請在 設置-應用管理 中開啓此應用的儲存受權。", Toast.LENGTH_SHORT).show();
            } else {
                Log.i(TAG, "進行受權");
                ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_READ_CONTACTS);
            }
        } else {
            Log.i(TAG, "不須要受權 ");
            // 進行正常操做
        }
}

如下是用戶受權反饋

Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG, "贊成受權");
            // 進行正常操做。
        } else {
            Log.i(TAG, "拒絕受權");
        }
    }
}

步驟五:建立監聽接口IHandlerCallBack

IHandlerCallBack iHandlerCallBack = new IHandlerCallBack() {
           @Override
           public void onStart() {
               Log.i(TAG, "onStart: 開啓");
           }

           @Override
           public void onSuccess(List<String> photoList) {
               Log.i(TAG, "onSuccess: 返回數據");
               for (String s : photoList) {
                   Log.i(TAG, s);
               }
           }

           @Override
           public void onCancel() {
               Log.i(TAG, "onCancel: 取消");
           }

           @Override
           public void onFinish() {
               Log.i(TAG, "onFinish: 結束");
           }

           @Override
           public void onError() {
               Log.i(TAG, "onError: 出錯");
            }
};

步驟六:配置 GalleryConfig

可先進行初始配置,除了ImageLoaderIHandlerCallBack以外,其餘都是選填,都有默認值。

GalleryConfig galleryConfig = new GalleryConfig.Builder()
                .imageLoader(new GlideImageLoader())    // ImageLoader 加載框架(必填)
                .iHandlerCallBack(iHandlerCallBack)     // 監聽接口(必填)
                .provider("com.yancy.gallerypickdemo.fileprovider")   // provider (必填)
                .pathList(path)                         // 記錄已選的圖片
                .multiSelect(false)                      // 是否多選   默認:false
                .multiSelect(false, 9)                   // 配置是否多選的同時 配置多選數量   默認:false , 9
                .maxSize(9)                             // 配置多選時 的多選數量。    默認:9
                .crop(false)                             // 快捷開啓裁剪功能,僅當單選 或直接開啓相機時有效
                .crop(false, 1, 1, 500, 500)             // 配置裁剪功能的參數,   默認裁剪比例 1:1
                .isShowCamera(true)                     // 是否現實相機按鈕  默認:false
                .filePath("/Gallery/Pictures")          // 圖片存放路徑
                .build();

能夠按照需求進行單項配置,前提須要填好 ImageLoaderIHandlerCallBack,舉例:

galleryConfig.getBuilder().multiSelect(true).build();   // 修改多選
  galleryConfig.getBuilder().isShowCamera(true).build();   // 修改顯示相機
  galleryConfig.getBuilder().imageLoader(new PicassoImageLoader()).build(); // 修改圖片加載框架

步驟七:啓動GalleryPick圖片選擇器

GalleryPick.getInstance().setGalleryConfig(galleryConfig).open(mActivity);

其餘功能使用方法說明:

一:裁剪功能使用說明

注意:裁剪功能只能在單選時、直接開啓相機時生效。

GalleryConfig galleryConfig = new GalleryConfig.Builder()
                .imageLoader(new GlideImageLoader())    // ImageLoader 加載框架(必填)
                .iHandlerCallBack(iHandlerCallBack)     // 監聽接口(必填)
                .provider("com.yancy.gallerypickdemo.fileprovider")   // provider (必填)
                .pathList(path)                         // 記錄已選的圖片
                .crop(true)                             // 快捷開啓裁剪功能,僅當單選 或直接開啓相機時有效
                .isShowCamera(true)                     // 是否現實相機按鈕  默認:false
                .filePath("/Gallery/Pictures")          // 圖片存放路徑
                .build();
GalleryPick.getInstance().setGalleryConfig(galleryConfig).open(mActivity);

若是須要自定義裁剪框的比例,可按照如下方法設置:

GalleryConfig galleryConfig = new GalleryConfig.Builder()
                .imageLoader(new GlideImageLoader())    // ImageLoader 加載框架(必填)
                .iHandlerCallBack(iHandlerCallBack)     // 監聽接口(必填)
                .provider("com.yancy.gallerypickdemo.fileprovider")   // provider (必填)
                .pathList(path)                         // 記錄已選的圖片
                .crop(true, 1, 1, 500, 500)           // 配置裁剪功能的參數,   默認裁剪比例 1:1
                .isShowCamera(true)                     // 是否現實相機按鈕  默認:false
                .filePath("/Gallery/Pictures")          // 圖片存放路徑
                .build();
GalleryPick.getInstance().setGalleryConfig(galleryConfig).open(mActivity);

裁剪圖片存放在 filePath 文件夾下的 crop 目錄下。內部建立了忽略文件,手機系統掃描不到此文件目錄下的媒體文件,防止裁剪圖片顯示在相冊中,影響心情。

二:直接開啓相機,其中有三種方法。

方法一:

GalleryConfig 中設置直接開啓相機的標識位。

GalleryConfig galleryConfig = new GalleryConfig.Builder()
          .iHandlerCallBack(iHandlerCallBack)     // 監聽接口(必填)
          .filePath("/Gallery/Pictures")          // 圖片存放路徑   (選填)
          .isOpenCamera(true)                  // 直接開啓相機的標識位
          .build();

GalleryPick.getInstance().setGalleryConfig(galleryConfig).open(mActivity);
方法二:

若是已經設置好了 GalleryConfig 可使用單項參數修改的方法來開啓相機。

galleryConfig.getBuilder().isOpenCamera(true).build();
GalleryPick.getInstance().setGalleryConfig(galleryConfig).open(mActivity);
方法三:

爲了方便使用,在不變更開啓相冊的GalleryConfig的狀況下,我還添加了如下方法。

GalleryPick.getInstance().setGalleryConfig(galleryConfig).openCamera(mActivity);

這個方法能夠直接使用。不須要在GalleryConfig中添加標誌位,或者進行單項修改。方便用戶使用。

三:深度自定義UI方法

可能有不少用戶對 GalleryPick 裏面的界面還有些不滿意。不要緊,接下來我來教你們如何本身定義其中的顏色。

下面舉個簡單的例子:

1)

我在 GalleryPick 中的 gallery_title.xml 中設置了標題欄的顏色爲 @color/gallery_blue 用戶能夠在 app 中的 colors.xml 中定義一個名爲 gallery_blue 的顏色:

<resources>
    <color name="gallery_blue">#FF4081</color>
</resources>

這樣就達到了覆蓋資源文件的效果。從而達到自定義UI。

2)

有些朋友會問,我標題欄設置了白色,可是標題欄的字體和圖標也是白色的,那該怎麼辦?
下面來說一下方法,由於是覆蓋資源文件,因此在 app 中建立 gallery_title.xml , 先將 GalleryPick 中的 gallery_title.xml 代碼copy過去,而後就簡單了。將TextViewtextColor中的顏色顏色換一下就行了。一樣,返回按鈕能夠改變一下 ImageViewsrc,很簡單。

舊版本記錄

1.2.0

  • 忽略裁剪圖片,返回相機拍攝的照片。

1.1.8

  • 優化 Provider 防止兩個以上 App 使用 GalleryPick會出現安裝不上的問題。
    修改詳情

1.1.7

  • 修復android 4.x 打開相機崩潰的bug

1.1.6

  • 修復android 7.x 打開相機崩潰的bug

1.1.4

  • 優化相冊系統。拍攝、裁剪的圖片,只有選中時纔在相冊顯示。

1.1.3

  • 修改裁剪所存在的bug

1.1.2

  • 添加經過覆蓋資源的方式,修改截圖頁面的配色。(使用方法參考

1.1.1

  • 修復直接開啓相機所存在的問題

1.1.0

1.0.4

1.0.3

  • 提供單選、多選、以及相機拍照功能。

  • 自定義ImageLoader

感謝(Thanks)

關於做者

舊項目地址

相關文章
相關標籤/搜索