在很多项目中都会用到图片选择器,比如在选择头像的时候,还会要求选择图片进行裁剪后再进行上传;而有的项目要支持拍照后进行图片裁剪再进行上传。由于Android系统兼容性问题,我们不得不考虑自己实现图片裁剪的整个过程。本项目就是在这样的环境下诞生的。为了能够快速引用到项目中,这里选择了自定义主题,在库中定义了默认属性,如果主题不符合你的需求,那就继承默认主题VanTheme进行重写覆盖就好了。所有属性以及代码都有详细注释,需要深入了解的请阅读源码。此项目是在已有项目的基础上并根据我自己的需求进行的开发,整合,在此感谢各位大神了!图片选择器也有很多开源的项目了,大多相差都不大,但也各有优缺点;为了不让观众混淆,在此我把项目命名为VanGogh。相信大家对这个名字不陌生吧!
一、项目现在的样子
高清照: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),荷兰后印象派画家。出生于新教牧师家庭,是后印象主义的先驱,并深深地影响了二十世纪艺术,尤其是野兽派与表现主义。——百度百科