GithubHelp home page GithubHelp logo

pengjianbo / galleryfinal Goto Github PK

View Code? Open in Web Editor NEW
3.2K 137.0 787.0 54.04 MB

Android自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪(单/多裁剪)、旋转、ImageLoader无绑定任由开发者选择、功能可配置、主题样式可配置。GalleryFinal为你定制相册。

License: Apache License 2.0

Java 100.00%

galleryfinal's Introduction

GalleryFinal简介

Android自定义相册,实现了拍照、图片选择(单选/多选)、 裁剪(单/多裁剪)、旋转、ImageLoader无绑定任由开发者选择、功能可配置、主题样式可配置。GalleryFinal为你定制相册。

为什么要使用GalleryFinal?

  • 拍照/选择图片倒立问题
  • 市场上各种相机和图片浏览器泛滥导致各种异常问题
  • 各种手机兼容性问题引起crash
  • 系统Gallery App不能进行多选
  • 系统拍照/选择图片/裁剪视乎不太好用
  • 系统Gallery App不美观
  • ……

** 简书文章 **

###注:1)、现支持所有主流的ImageLoader,包括Glide/Fresco/Picasso/UIL等,如果你觉得还不满足,欢迎在issues上提问。2)、本项目是基于SDK 23(6.0)系统编译的请开发者将targetSdkVersion改成23

截图展示

Demo apk二维码地址: DEMO APK

GalleryFinal使用方法

下载GalleryFinal

通过Gradle抓取:

compile 'cn.finalteam:galleryfinal:1.4.8.7'
compile 'com.android.support:support-v4:23.1.1'

Next Version

  • 添加多选强制裁剪
  • 图片分页查看
  • 拍照自动纠正图片(自动旋转)
  • 添加配置-配置图片压缩到指定大小后返回调用者
  • 精简配置
  • ……

1.4.8.4更新内容

  • 解决fresco gif图片不显示问题

具体使用

1、通过gradle把GalleryFinal添加到你的项目里

2、在你的Application中添加配置GallerFinal

//设置主题
//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();

//配置imageloader
ImageLoader imageloader = new UILImageLoader();       
CoreConfig coreConfig = new CoreConfig.Builder(context, imageloader, theme)
        .setDebug(BuildConfig.DEBUG)
        .setFunctionConfig(functionConfig)
        ...
        .build();
GalleryFinal.init(coreConfig);

3、选择图片加载器

自定义步骤:

1)、实现ImageLoader接口

2)、在displayImage方法中实现图片加载,这个需要注意的是一定要禁止缓存到本地和禁止缓存到内存

3)、设置请求图片目标大小。displayImage方法中已经给出了width和height

4)、设置默认图和请求图片清晰度,建议把图片请求清晰度调整为Bitmap.Config.RGB_565避免出现OOM情况

  • ……

4、启动GalleryFinal

在GalleryFinal 1.3.0版本中相册、拍照、裁剪和图片编辑功能可独立使用

REQUEST_CODE_GALLERY 为请求码 functionConfig 为功能配置 mOnHanlderResultCallback 为请求回调

  • 单选打开相册
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_CROP, mOnHanlderResultCallback);
//带配置
GalleryFinal.openCrop(REQUEST_CODE_CROP, functionConfig, mOnHanlderResultCallback);
  • 使用图片编辑
GalleryFinal.openEdit(REQUEST_CODE_EDIT, mOnHanlderResultCallback);
//带配置
GalleryFinal.openEdit(REQUEST_CODE_EDIT, functionConfig, mOnHanlderResultCallback);
  • FunctionConfig Builder类说明
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)//是否开启预览功能
  • 主题的配置

1)、GalleryFinal默认主题为DEFAULT(深蓝色),还自带主题:DARK(黑色主题)、CYAN(蓝绿主题)、ORANGE(橙色主题)、GREEN(绿色主题)和TEAL(青绿色主题),当然也支持自定义主题(Custom Theme),在自定义主题中用户可以配置字体颜色、图标颜色、更换图标、和背景色

  • 设置主题

1)、使用自定义主题

 GalleryTheme theme = new GalleryTheme.Builder()
        .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)
        //...其他配置
        .build();
GalleryFinal.init(theme);

2)、ThemeConfig类说明

setTitleBarTextColor//标题栏文本字体颜色
setTitleBarBgColor//标题栏背景颜色
setTitleBarIconColor//标题栏icon颜色,如果设置了标题栏icon,设置setTitleBarIconColor将无效
setCheckNornalColor//选择框未选颜色
setCheckSelectedColor//选择框选中颜色
setCropControlColor//设置裁剪控制点和裁剪框颜色
setFabNornalColor//设置Floating按钮Nornal状态颜色
setFabPressedColor//设置Floating按钮Pressed状态颜色

setIconBack//设置返回按钮icon
setIconCamera//设置相机icon
setIconCrop//设置裁剪icon
setIconRotate//设置旋转icon
setIconClear//设置清楚选择按钮icon(标题栏清除选择按钮)
setIconFolderArrow//设置标题栏文件夹下拉arrow图标
setIconDelete//设置多选编辑页删除按钮icon
setIconCheck//设置checkbox和文件夹已选icon
setIconFab//设置Floating按钮icon
setEditPhotoBgTexture//设置图片编辑页面图片margin外背景
setIconPreview设置预览按钮icon
setPreviewBg设置预览页背景
  • CoreConfig配置类
Builder(Context context, ImageLoader imageLoader, ThemeConfig themeConfig) //构建CoreConfig所需ImageLoader和ThemeConfig
setDebug //debug开关
setEditPhotoCacheFolder(File file)//配置编辑(裁剪和旋转)功能产生的cache文件保存目录,不做配置的话默认保存在/sdcard/GalleryFinal/edittemp/
setTakePhotoFolder设置拍照保存目录,默认是/sdcard/DICM/GalleryFinal/
setFunctionConfig //配置全局GalleryFinal功能
setNoAnimcation//关闭动画
setPauseOnScrollListener//设置imageloader滑动加载图片优化OnScrollListener,根据选择的ImageLoader来选择PauseOnScrollListener

5、如果你还想更深度的定制页面效果可以把资源文件名字定义成Gallery资源名已达到覆盖效果。如有不理解可以联系我。

权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

混淆配置

-keep class cn.finalteam.galleryfinal.widget.*{*;}
-keep class cn.finalteam.galleryfinal.widget.crop.*{*;}
-keep class cn.finalteam.galleryfinal.widget.zoonview.*{*;}

感谢(Thanks)

关于作者

License

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

galleryfinal's People

Contributors

pengjianbo avatar springeye 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  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

galleryfinal's Issues

强制裁剪回退时会看到中间页面

强制裁剪完,自动退出裁剪页面后,可以看到中间页面,虽然很快也被自动关闭了,但用户大概因为这儿会疑惑一下,因为启动时并没有看到这个中间页

Nexus5手机6.0拍照崩溃

02-23 09:04:47.016 11327-11327/cn.finalteam.galleryfinal.sample E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 39247812) 02-23 09:04:47.017 11327-11327/cn.finalteam.galleryfinal.sample E/AndroidRuntime: Error reporting crash android.os.TransactionTooLargeException: data parcel size 39247812 bytes at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:503) at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4425) at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

单选模式下面 返回PhotoSelectActivity 结束有延迟,甚至不结束

单选模式下面 返回PhotoSelectActivity 结束有延迟,甚至不结束
ActivityManager.getActivityManager().finishActivity(PhotoSelectActivity.class);
我手动调用了还是这样,为什么呢?我哪里配置出错了嘛?
`PauseOnScrollListener pauseOnScrollListener = new GlidePauseOnScrollListener(false, true);
mFunctionConfigBuilder.setMutiSelectMaxSize(mMaxSize);
mFunctionConfigBuilder.setEnableEdit(true);
mFunctionConfigBuilder.setEnableRotate(true);
mFunctionConfigBuilder.setRotateReplaceSource(false);

    mFunctionConfigBuilder.setEnableCrop(true);
    mFunctionConfigBuilder.setCropReplaceSource(false);
    mFunctionConfigBuilder.setCropSquare(false);
    mFunctionConfigBuilder.setForceCrop(false);//启动强制裁剪功能,一进入编辑页面就开启图片裁剪,不需要用户手动点击裁剪,此功能只针对单选操作
    mFunctionConfigBuilder.setForceCropEdit(false);//在开启强制裁剪功能时是否可以对图片进行编辑(也就是是否显示旋转图标和拍照图标)
    mFunctionConfigBuilder.setEnableCamera(true);
    mFunctionConfigBuilder.setEnablePreview(true);

    mCoreConfigBuilder = new CoreConfig.Builder(PhotoSelectBaseActivity.this, imageLoader, mThemeConfig).setFunctionConfig(mFunctionConfigBuilder.build()).setPauseOnScrollListener(pauseOnScrollListener).setNoAnimcation(bNoAnimation);

    GalleryFinal.init(mCoreConfigBuilder.build());`

选择成功后在onHanlderSuccess返回的数组一段时间后会被清空

PhotoSelectActivity.java中选择之后直接返回了成员变量mSelectPhotoList,在onDestroy中又将该List清空了

else if ( id == R.id.fab_ok ) {
    if(mSelectPhotoList.size() > 0) {
        if (!GalleryFinal.getFunctionConfig().isEditPhoto()) {
            resultData(mSelectPhotoList);
        } else {
            toPhotoEdit();
        }
    }
}

protected void onDestroy() {
    super.onDestroy();
    mPhotoTargetFolder = null;
    mSelectPhotoList.clear();
    System.gc();
}

还有希望能增加一个取消选择的回调

华为mate8上崩溃

在华为mate8上,安卓6.0系统,用您的demo打开相机,照完相后崩溃

按说明写的报错

错误是:ImageLoader must be init with configuration before using,怎么解决了,还有能不能自定义相册的页面呢

相机位置不明显

希望能把相机放到所有图片之前,目前的相机位置不明显,很多人不知道。

android 4.4及以下系统存状态栏的问题

v0e0n ztw8 4bib2g1 a s

另外有两个个人的细节体验:
1、默认的拍照图片比较像微信的朋友圈图标,容易让人联想到分享按钮,自己替换拍照图片又容易变成与原来旋转按钮、裁剪按钮大小不一致的情况出现,影响一致协调性 希望自带的拍照图片icon能够更加明确一点
2、加载图片过程中的占位图片能否做成可以自己设置的 还有就是在占位图片到显示真正的图片瞬间有种占位图被拉伸的感觉,不知是不是这个问题,自己重新设置动画还是有该问题

Imagloader,功能独立

1、UniversalImagloader也算主流吧
2、希望新版本也能保持相册、拍照、裁剪和图片编辑功能可独立使用

ImageLoader自定义问题

首先赞一下作者漂亮的库,有个关于自定义ImageLoader的问题请教一下。
为啥ImageLoader自定义不允许使用SD卡缓存和内存缓存?
不是缓存在一些操作的时候。整个界面会闪一下。体验有点点问题
SD卡缓存怕生成缩略图。那内存缓存会影响什么呢?

MemoryLeak

Global类中有个静态的Activity引用,似乎没有看到哪里制空~

图片质量问题

选择图片之后,不停点击旋转 按钮, 次数多了之后,图片质量下降明显

请问裁剪框可以自定义宽高比么

com.edmodo:cropper可以自定义裁剪框的比例,请问咱的可以自定义宽高比么,现在似乎只要不是forceSqure,自定义setCropWidth,setCropHeight后,裁剪框可以随意拖动

参数可以全局配置

能否弄成可以全局配置,只要配置一次即可,因为参数大部分情况下都是统一的,现在每次调用的时候都要传入配置,配置里动态的参数感觉也就Activity或者Fragment,比如下面的样子

GalleryFinal.openCamera(Activity);
GalleryFinal.openCamera(Fragment);

相机点击储存的时候不会调用GalleryFinal.OnHanlderResultCallback()?

在相册中点击保存的时候可以正常调用,但是相机就不行
相机配置:

  FunctionConfig functionConfig = new FunctionConfig.Builder()
            .setEnableCamera(true)
            .setEnableEdit(true)
            .setEnableCrop(true)
            .setEnableRotate(true)
            .setCropSquare(true)
            .setEnablePreview(true)
            .build();

测试机三星GT-I9505 Android 4.3

提示希望可以控制

现在的版本,在裁剪成功等操作的时候,会toast一个提示出来,但有些时候,并不想展示这些提示,希望新版可以控制

主题

5.0以上设备如何设置状态栏的颜色

有个需求好像满足不了,还是我没有找到。

选择单张图片。然后必须进行剪辑。编辑只有一个剪辑。也就是说,选择了图片之后直接进入剪辑状态。这个能实现吗?在之前版本可以。现在这个怎么不知道怎么配置了?

建议增加模块

建议把微信发朋友圈时 选择图片的整个流程给加进去 可以单独做个模块

按宽高裁剪显示不清楚

这个裁剪的宽高是怎么算的,我设了个200,50,裁剪后的图显示很模糊,原图就是手机拍照的大小

不建议在library中有任务toast显示

如果。目前如果拍照失败或显示toast,建议返回给调用着,由调用调用着自己处理失败时间,另外提交一个pull request,拍照是按下返回键问题

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.