转载请注明出处:王亟亟的大牛之路
技术内容在P2,P1是废话可以跳过
P1:(开胃菜)
最近手头上工作的事差不多告一段落了,可以把更多的精力花在学习上了,还是会继续翻git这部分的文章(搬运工),然后准备整整一些之前没接触过的知识点(具体学什么没想好,等会看看去)
先上一下家里宝贝的近照
P2:(正菜)
今天上的是一个自称是“史上最强的图片选择器” GalleryFinal
话不多说先看看效果
作者几乎实现了我们平时所需的“皂片”选择器的所有功能,还带有一定的编辑和图片缩放功能。
编辑功能来源于:https://github.com/jdamcd/android-crop
图片缩放来源于:https://github.com/chrisbanes/PhotoView
How to use
Grade:
compile 'cn.finalteam:galleryfinal:1.4.3'
compile 'com.android.support:support-v4:23.1.1'
Eclipse:
。。。。。。。。我不知道怎么说。。。。。。。。。
这边提个醒
本项目是基于SDK 23(6.0)系统编译的请开发者将targetSdkVersion改成23
我这边再来解释下怎么使用这个库,这跟平时我们那些自定义控件不一样,还是需要一些配置的工作(图片加载部分都拿ImageLoader为例)
- 因为我们使用的事ImageLoader所以一般要在Application中配置我们的ImageLoader,像这样
public class IApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//建议在application中配置
//设置主题
ThemeConfig theme = ThemeConfig.CYAN
ThemeConfig theme = new ThemeConfig.Builder()
.build();
//配置功能
FunctionConfig functionConfig = new FunctionConfig.Builder()
.setEnableCamera(true)
.setEnableEdit(true)
// .setEnableCrop(true)
.setEnableRotate(true)
.setCropSquare(true)
.setEnablePreview(true)
.build();
CoreConfig coreConfig = new CoreConfig.Builder(this, new UILImageLoader(), theme)
.setFunctionConfig(functionConfig)
.setPauseOnScrollListener(new UILPauseOnScrollListener(false, true))
.build();
GalleryFinal.init(coreConfig);
}
}
当然,你也可以在Activity中配置,像这样
private void initImageLoader(Context context) {
// This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this);
// method.
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY - 2);
config.denyCacheImageMultipleSizesInMemory();
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
}
2.配置UI选择器UI等一系列属性
ThemeConfig theme = new ThemeConfig.Builder()
...
.build();
//可以用默认Theme也可以自定义去设置 Icon啊 字体颜色啊什么的,像这样
.setTitleBarBgColor(Color.rgb(0xFF, 0x57, 0x22))
.setTitleBarTextColor(Color.BLACK)
.setTitleBarIconColor(Color.BLACK)
.setFabNornalColor(Color.RED)
.setFabPressedColor(Color.BLUE)
.setCheckNornalColor(Color.WHITE)
.setCheckSelectedColor(Color.BLACK)
.setIconBack(R.mipmap.ic_action_previous_item)
.setIconRotate(R.mipmap.ic_action_repeat)
.setIconCrop(R.mipmap.ic_action_crop)
.setIconCamera(R.mipmap.ic_action_camera)
3.功能配置,具体的选择器功能呈现的配置
//配置功能
FunctionConfig functionConfig = new FunctionConfig.Builder()
...
.build();
//可设置项,如下
setMutiSelect(boolean)//配置是否多选
setMutiSelectMaxSize(int maxSize)//配置多选数量
setEnableEdit(boolean)//开启编辑功能
setEnableCrop(boolean)//开启裁剪功能
setEnableRotate(boolean)//开启选择功能
setEnableCamera(boolean)//开启相机功能
setCropWidth(int width)//裁剪宽度
setCropHeight(int height)//裁剪高度
setCropSquare(boolean)//裁剪正方形
setSelected(List)//添加已选列表,只是在列表中默认呗选中不会过滤图片
setFilter(List list)//添加图片过滤,也就是不在GalleryFinal中显示
takePhotoFolter(File file)//配置拍照保存目录,不做配置的话默认是/sdcard/DCIM/GalleryFinal/
setRotateReplaceSource(boolean)//配置选择图片时是否替换原始图片,默认不替换
setCropReplaceSource(boolean)//配置裁剪图片时是否替换原始图片,默认不替换
setForceCrop(boolean)//启动强制裁剪功能,一进入编辑页面就开启图片裁剪,不需要用户手动点击裁剪,此功能只针对单选操作
setForceCropEdit(boolean)//在开启强制裁剪功能时是否可以对图片进行编辑(也就是是否显示旋转图标和拍照图标)
setEnablePreview(boolean)//是否开启预览功能
4.主要操作配置(拍照,选择相册,剪裁等)
CoreConfig coreConfig = new CoreConfig.Builder(MainActivity.this, imageLoader, themeConfig)
.setFunctionConfig(functionConfig)
...
.build();
然后再配置具体操作项
ActionSheet.createBuilder(MainActivity.this, getSupportFragmentManager())
...
.show();
可配置内容如下:
单选打开相册:
GalleryFinal.openGallerySingle(REQUEST_CODE_GALLERY, mOnHanlderResultCallback);
//带配置
GalleryFinal.openGallerySingle(REQUEST_CODE_GALLERY, functionConfig, mOnHanlderResultCallback);
多选打开相册
GalleryFinal.openGalleryMuti(REQUEST_CODE_GALLERY, mOnHanlderResultCallback);
//带配置
FunctionConfig config = new FunctionConfig.Builder(MainActivity.this)
.setMutiSelectMaxSize(8)
.build();
GalleryFinal.openGalleryMuti(REQUEST_CODE_GALLERY, functionConfig, mOnHanlderResultCallback);
拍照
GalleryFinal.openCamera(REQUEST_CODE_CAMERA, mOnHanlderResultCallback);
//带配置
GalleryFinal.openCamera(REQUEST_CODE_CAMERA, functionConfig, mOnHanlderResultCallback);
裁剪
GalleryFinal.openCrop(REQUEST_CODE_CAMERA, mOnHanlderResultCallback);
//带配置
GalleryFinal.openCrop(REQUEST_CODE_CAMERA, functionConfig, mOnHanlderResultCallback);
图片编辑
GalleryFinal.openEdit(REQUEST_CODE_CAMERA, mOnHanlderResultCallback);
//带配置
GalleryFinal.openEdit(REQUEST_CODE_CAMERA, functionConfig, mOnHanlderResultCallback);
再添加一个操作返回的回调
private GalleryFinal.OnHanlderResultCallback mOnHanlderResultCallback = new GalleryFinal.OnHanlderResultCallback() {
@Override
public void onHanlderSuccess(int reqeustCode, List<PhotoInfo> resultList) {
if (resultList != null) {
mPhotoList.addAll(resultList);
mChoosePhotoListAdapter.notifyDataSetChanged();
}
}
然后就可以使用了,看上去需要配置的东西很麻烦,但是只要一次设置之后就都可以用了,关键功能强大,配置麻烦也就忍了!!
源码地址:https://github.com/ddwhan0123/GalleryFinal/archive/master.zip