Android图片选择器,支持拍照、从相册选择、裁剪、自定义主题

在很多项目中都会用到图片选择器,比如在选择头像的时候,还会要求选择图片进行裁剪后再进行上传;而有的项目要支持拍照后进行图片裁剪再进行上传。由于Android系统兼容性问题,我们不得不考虑自己实现图片裁剪的整个过程。本项目就是在这样的环境下诞生的。为了能够快速引用到项目中,这里选择了自定义主题,在库中定义了默认属性,如果主题不符合你的需求,那就继承默认主题VanTheme进行重写覆盖就好了。所有属性以及代码都有详细注释,需要深入了解的请阅读源码。此项目是在已有项目的基础上并根据我自己的需求进行的开发,整合,在此感谢各位大神了!图片选择器也有很多开源的项目了,大多相差都不大,但也各有优缺点;为了不让观众混淆,在此我把项目命名为VanGogh。相信大家对这个名字不陌生吧!

一、项目现在的样子


图片选择计数预览.png
图片裁剪.png
自定义主题.png

高清照:https://github.com/GitPhoenix/VanGogh/tree/master/screen

二、怎么应用?

依赖:compile 'com.alley:VanGogh:1.3.3'

//拍照
VanGogh.from(MainActivity.this)
        .choose(VanMediaType.ofAll())//拍照时,无效
        .cameraVisible(true, getPackageName())//拍照时,第一个参数无效
        .withResultSize(1024, 1024)
        .cropEnable(true, VanCropType.CROP_TYPE_RECTANGLE)//第一个参数为FALSE时,第二个参数无效
        .theme(R.style.VanTheme_ActivityAnimation)
        .thumbnailScale(0.85f)
        .toast(new VanToast())
        .imageLoader(new GlideImageLoader())
        .forCamera(REQUEST_CODE_CAMERA);

//从相册选择
VanGogh.from(MainActivity.this)
        .choose(VanMediaType.ofAll())
        .countable(true)//若开启裁剪,则无效
        .maxCount(9)
        .rowCount(3)
        .cameraVisible(true, getPackageName())//设置在第一个参数为FALSE时,第二个参数无效
        .withResultSize(1024, 1024)
        .cropEnable(false, VanCropType.CROP_TYPE_RECTANGLE)//第一个参数为TRUE时,则可选中数量被设为1,此时maxSelectable(9)无效;第一个参数为FALSE时,第二个参数无效
        .theme(R.style.VanTheme_Dracula)
        .addFilter(new GifSizeFilter(320, 320, 5 * VanMediaFilter.K * VanMediaFilter.K))
        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
        .thumbnailScale(0.85f)
        .toast(new VanToast())
        .imageLoader(new GlideImageLoader())
        .forResult(REQUEST_CODE_CHOOSE);

三、自定义主题
项目中已定义了默认属性,只需继承VanTheme样式进行重写覆盖原有值就可以了。在外部可以这样写:

<style name="VanTheme.Dracula">
        ........
</style>
或者
<style name="Dracula" parent="VanTheme">
        ........
</style>

属性说明:
<style name="VanTheme.Dracula">
        //标题栏背景色
        <item name="colorPrimary">@color/draculaPrimary</item>
        //状态栏颜色
        <item name="colorPrimaryDark">@color/draculaPrimaryDark</item>
        //裁剪页面按钮颜色
        <item name="colorAccent">@color/draculaColorAccent</item>

        //标题栏高度,默认自适应系统高度
        <item name="android:actionBarSize">52dp</item>
        //页面切换动画,默认为系统动画
        <item name="android:windowAnimationStyle">@style/ActivityAnimation</item>

        //选择图片集合时的指示Icon
        <item name="vanSpinnerIcon">@drawable/van_spinner_down</item>
        //页面返回按钮指示Icon
        <item name="vanNavigationIcon">@drawable/van_chevron_left</item>

        //标题字体颜色
        <item name="VanTextColorPrimary">@color/draculaTextColorPrimary</item>
        //标题字体大小
        <item name="vanTitleSize">@dimen/van_sp_title</item>
        //页面背景色
        <item name="vanWindowBackground">@color/draculaWindowBackground</item>

        //选择图片集合显示图片数量字体颜色
        <item name="vanSpinnerCount">@color/draculaSpinnerCount</item>
        //PopupWindow背景色
        <item name="vanSpinnerPopupWindowStyle">@style/Popup.Dracula</item>

        //没有图片时友好提示图片
        <item name="vanEmptyDrawable">@drawable/van_empty_dracula</item>
        //没有图片时友好提示文字
        <item name="vanEmptyText">@color/draculaEmptyText</item>

        //底部按钮字体大小
        <item name="vanNavigationSize">@dimen/van_sp_navigation</item>
        //底部背景色
        <item name="vanNavigationBackground">@color/draculaNavigationBackground</item>
        //【预览】字体颜色
        <item name="vanNavigationPreview">@color/draculaNavigationPreview</item>
        //【确定】字体颜色
        <item name="vanNavigationApply">@color/draculaNavigationApply</item>

        //图片展示界面显示【拍照】时背景色
        <item name="vanCameraBackground">@color/draculaCameraBackground</item>
        //【拍照】字体颜色
        <item name="vanCamera">@color/draculaCamera</item>
    </style>

四:福利
项目中有对话框代码、权限请求封装等;拍照也可以跳转到裁剪页面,一切都准备好了。更多详情请阅读源码,有详细注释。
文森特·威廉·梵·高(Vincent Willem van Gogh,1853-1890),荷兰后印象派画家。出生于新教牧师家庭,是后印象主义的先驱,并深深地影响了二十世纪艺术,尤其是野兽派与表现主义。——百度百科

源码:https://github.com/GitPhoenix/VanGogh

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容