Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 圖片選擇器

Android 圖片選擇器

編輯:關於Android編程

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

圖片展示

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

Gif展示

單選 多選
截圖

GalleryPick 功能

UI重改 所有功能可配置 解決OOM情況 圖片多選、單選 ImageLoader 無綁定,任由開發者選擇 可直接開啟相機 可裁剪、可旋轉

版本說明

1.1.2

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

使用說明

步驟一:

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

通過Gradle使用

Project 的 build.gradle 中 添加:

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

app 的 build.gradle 中 添加:

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

通過maven使用


    
        jitpack.io
        https://jitpack.io
    

    com.github.YancyYe
    GalleryPick
    1.1.2

步驟二:創建 圖片加載器 (其中可以按照 喜好 使用不同的 第三方圖片)

示例:

使用Glide加載

使用Picasso加載

使用Fresco加載

步驟三:申請權限

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

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

可先進行初始配置,除了ImageLoader 和 IHandlerCallBack之外,其他都是選填,都有默認值。

GalleryConfig galleryConfig = new GalleryConfig.Builder()
                .imageLoader(new GlideImageLoader())    // ImageLoader 加載框架(必填)
                .iHandlerCallBack(iHandlerCallBack)     // 監聽接口(必填)
                .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();

可以按照需求進行單項配置,前提需要填好 ImageLoader 和 IHandlerCallBack,舉例:

  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)     // 監聽接口(必填)
                .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)     // 監聽接口(必填)
                .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 的顏色:


    #FF4081

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

2)

有些朋友會問,我標題欄設置了白色,但是標題欄的字體和圖標也是白色的,那該怎麼辦?
下面來講一下方法,因為是覆蓋資源文件,所以在 app 中創建 gallery_title.xml , 先將 GalleryPick 中的 gallery_title.xml 代碼copy過去,然後就簡單了。將TextView的textColor中的顏色顏色換一下就好了。同樣,返回按鈕可以改變一下 ImageView的src,很簡單。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved