編輯:關於Android編程
GalleryPick 是 Android 自定義相冊,實現了拍照、圖片選擇(單選/多選)、裁剪、ImageLoader無綁定 任由開發者選擇
本開源代碼以關聯到 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,很簡單。
直接看代碼,注釋都寫清楚了復制代碼 代碼如下:public class MainActivity extends Activity { private Imag
從這篇開始,我將延續androidGraphics系列文章把圖片相關的知識給大家講完,這一篇先稍微進階一下,給大家把《Android Graphics(二):路徑及文字》
1.activity_main.xml 2.MainActivity.jav
Android4.3按鍵消息處理與之前的版本有稍微的區別,基本原理還是一樣的,這裡主要從兩個階段來分析: 1.前期的准備工作,即開機時啟動相應的的線程,靜候按鍵事件的來臨