android选择选择图片封装库,Android_Album_android图片选择库

Album

android album

Chinese : wiki

Screenshot

multiple, radio, preview, crop, sample ui

加载失败请移步至 Github 查看

album_multiple.png

album_radio.png

album_preview.png

album_crop.png

album_sample_ui.png

图片选择器

选择图片,裁剪,拍照

简单使用

Manifests.xml 添加

android:name="com.yalantis.ucrop.UCropActivity"

android:screenOrientation="portrait"

android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

android:name="com.album.ui.activity.AlbumActivity"

android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

android:name="com.album.ui.activity.PreviewActivity"

android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

gradle添加

// 如果项目中 依赖了 design 高版本包,那么可以不用单独依赖 RecyclerView

// 因为 高版本的 design 已经包含了 RecyclerView

compile "com.android.support:design:$designVersion"

or

compile "com.android.support:recyclerview-v7:$supportLibraryVersion"

// 这两个必须依赖,如果想使用 Glide 4.x ,请自行实现 AlbumImageLoader

compile "com.github.yalantis:ucrop:$ucropVersion"

compile "com.github.bumptech.glide:glide:$glideVersion"

示例

Album

.getInstance()

.setAlbumModels(new ArrayList())

.setOptions(new UCrop.Options())

.setAlbumImageLoader(new SimpleAlbumImageLoader())

.setConfig(new AlbumConfig())

.setAlbumListener(new SimpleAlbumListener())

.start(this);

config

//是否隐藏相机,默认不隐藏

boolean hideCamera = false;

//是否单选 ,默认多选

boolean isRadio = false;

//单选点击是否开启裁剪,默认开启,不开启直接返回当前点击的图片路径

boolean isCrop = true;

// 拍照之后是否直接裁剪,默认不裁剪

boolean cameraCrop = false;

//预览页多选数据变动,使用者点击 Toolbar 的 返回键 返回时 是否刷新多选数据,默认不刷新

boolean previewFinishRefresh = false;

//预览页多选数据变动,使用者点击 Back 的 返回键 返回时 是否刷新多选数据,默认不刷新

boolean previewBackRefresh = false;

//权限被拒绝时是否直接 finish 掉 图片选择库 的 Activity, 默认不 finish

boolean isPermissionsDeniedFinish = false;

//是否是使用 Fresco 加载图片,当使用 Fresco 时 必须设置为 true,返回的 ImageView 就是 Fresco 的 SimpleDraweeView

boolean isFrescoImageLoader = false;

//多选最多可选择几个

int multipleMaxCount = 9;

//照相路径

String cameraPath = null;

//裁剪路径

String uCropPath = null;

//分页加载时一次加载多少张图片

int count = 200;

// 图片页 Activity 的 Toolbar 一些设置

int albumStatusBarColor = R.color.colorAlbumStatusBarColorDay;

int albumToolbarBackground = R.color.colorAlbumToolbarBackgroundDay;

int albumToolbarIcon = R.drawable.ic_action_back_day;

int albumToolbarIconColor = R.color.colorAlbumToolbarIconColorDay;

int albumToolbarTextColor = R.color.colorAlbumToolbarTextColorDay;

int albumToolbarText = R.string.album_name;

float albumToolbarElevation = 6f;

// 图片页 Activity 底部的 View 一些设置

private int albumBottomViewBackground = R.color.colorAlbumBottomViewBackgroundDay;

private int albumBottomFinderTextSize = 16;

private int albumBottomFinderTextBackground = -1;

private int albumBottomFinderTextColor = R.color.colorAlbumBottomFinderTextColorDay;

private int albumBottomFinderTextCompoundDrawable = R.drawable.ic_action_album_finder_day;

private int albumBottomFinderTextDrawableColor = R.color.colorAlbumBottomFinderTextDrawableColorDay;

private int albumBottomPreViewText = R.string.album_preview;

private int albumBottomPreViewTextSize = 16;

private int albumBottomPreViewTextColor = R.color.colorAlbumBottomPreViewTextColorDay;

private int albumBottomPreviewTextBackground = -1;

private int albumBottomSelectText = R.string.album_select;

private int albumBottomSelectTextSize = 16;

private int albumBottomSelectTextColor = R.color.colorAlbumBottomSelectTextColorDay;

private int albumBottomSelectTextBackground = -1;

// 图片页 Activity 文件夹目录的 一些设置

int albumListPopupWidth = 600;

int albumListPopupHorizontalOffset = 0;

int albumListPopupVerticalOffset = 0;

int albumListPopupItemBackground = R.color.colorAlbumListPopupItemBackgroundDay;

int albumListPopupItemTextColor = R.color.colorAlbumListPopupItemTextColorDay;

// 图片Fragment

private int spanCount = 3;

private int dividerWidth = 10;

private int albumContentViewCameraTips = R.string.album_image_camera_tv_tips;

private int albumContentViewCameraTipsSize = 18;

private int albumContentViewCameraTipsColor = R.color.colorAlbumContentViewTipsColorDay;

private int albumContentViewCameraBackgroundColor = R.color.colorAlbumContentViewBackgroundColorColorDay;

private int albumContentViewBackground = R.color.colorAlbumContentViewBackgroundDay;

private int albumContentViewCameraDrawable = R.drawable.ic_camera_alt_black_24dp;

private int albumContentViewCameraDrawableColor = R.color.colorAlbumContentViewCameraDrawableColorDay;

private int albumContentItemCheckBoxDrawable = R.drawable.selector_album_item_check;

private int albumContentEmptyDrawable = R.drawable.ic_camera_alt_black_24dp;

private int albumContentEmptyDrawableColor = R.color.colorAlbumContentEmptyDrawableColorDay;

//预览页 一些设置

private int albumPreviewTitle = R.string.preview_title;

private int albumPreviewBackground = R.color.colorAlbumPreviewBackgroundDay;

private int albumPreviewBottomViewBackground = R.color.colorAlbumPreviewBottomViewBackgroundDay;

private int albumPreviewBottomOkText = R.string.preview_select;

private int albumPreviewBottomOkTextColor = R.color.colorAlbumPreviewBottomViewOkColorDay;

private int albumPreviewBottomCountTextColor = R.color.colorAlbumPreviewBottomViewCountColorDay;

private int albumPreviewBottomOkTextSize = 16;

private int albumPreviewBottomCountTextSize = 16;

回调

public class SimpleAlbumListener implements AlbumListener {

/**

* 点击图片页Toolbar finish

*/

@Override

public void onAlbumActivityFinish() {

}

/**

* 权限被拒绝

* type:

*

* *** AlbumConstant.TYPE_ALBUM : 读取权限被拒

* *** AlbumConstant.TYPE_CAMERA : 相机权限被拒

*/

@Override

public void onAlbumPermissionsDenied(int type) {

}

/**

* 点击 预览 或者 选择 按钮时 Fragment 为 null, 应该不会被触发..

*/

@Override

public void onAlbumFragmentNull() {

}

/**

* 预览时,滑动 ViewPager 时 会检测图片是否还存在,不存在会触发

* 触发条件: Home 放在后台,在其他软件中删掉了图片

*/

@Override

public void onAlbumPreviewFileNull() {

}

/**

* 图片 文件夹 目录 为空,就是没有图片..

*/

@Override

public void onAlbumFinderNull() {

}

/**

* 点击预览时没有选择图片

*/

@Override

public void onAlbumBottomPreviewNull() {

}

/**

* 点击选择时 没有选择图片

*/

@Override

public void onAlbumBottomSelectNull() {

}

/**

* 点击 ITEM 时,会判断当前图片是否存在

* 触发条件: Home 放在后台,在其他软件中删掉了图片

*/

@Override

public void onAlbumFragmentFileNull() {

}

/**

* 预览界面选择确定,但是没有选中的图片

*/

@Override

public void onAlbumPreviewSelectNull() {

}

/**

* 多选点击 checkbox 时,会判断当前图片是否存在

* 触发条件: Home 放在后台,在其他软件中删掉了图片

*

* 此时可选择是否强制刷新图库信息

*/

@Override

public void onAlbumCheckBoxFileNull() {

}

/**

* 裁剪被取消

*/

@Override

public void onAlbumFragmentCropCanceled() {

}

/**

* 拍照被取消

*/

@Override

public void onAlbumFragmentCameraCanceled() {

}

/**

* 裁剪出现异常

*/

@Override

public void onAlbumFragmentUCropError(@Nullable Throwable data) {

}

/**

* 返回的选择图片信息

*

* albumModel.getPath(); 为当前图片地址

*

* 建议 FileUtils.isFile 判断一下图片是否还存在

*/

@Override

public void onAlbumResources(@NonNull List list) {

}

/**

* 裁剪之后会返回的图片File

*/

@Override

public void onAlbumUCropResources(@Nullable File scannerFile) {

}

/**

* 多选最多了

*/

@Override

public void onAlbumMaxCount() {

}

/**

* 点击 back 返回到app

*/

@Override

public void onAlbumActivityBackPressed() {

}

/**

* 打开相机失败,有可能是当前系统没有相机

*/

@Override

public void onAlbumOpenCameraError() {

}

// 本机没有图片

@Override

public void onAlbumEmpty() {

}

}

自定义图片加载

Album内部有一个SimpleGlideAlbumImageLoader,使用的是 Glide 3.x 版本,如果想使用这个,必须依赖 Glide 3.x

目前主流的图片加载器,sample都有示例

需要注意的是如果使用Fresco,ImageLoader 的 frescoView(context,type) 必须返回正确的View,例如 fresco 的 预览时 双击缩放功能,需要额外依赖完成, type == 1 时 是预览页的图片加载

Fresco

Album

.getInstance()

.setConfig(new AlbumConfig().setFrescoImageLoader(true) // 通知 Album 图片加载框架使用的是 Fresco

.start(this);

Glide 4.x

Picasso

这里需要说明的是,如果直接用 file 加载图片, Picasso 在某些手机上会出现 ExifInterface_JNI: Raw image not detected

所以用Uri去加载图片

universalimageloader

测试过的机型

onePlus3T 7.1.1

huawei ale-cl00 4.4.4

meizu mx5 5.1

galaxy S8+ 7.0

hanzhong 5.1

xiaomi note 6.0.1

redmi note4 6.0

oppo R7c 4.4.4

Lenovo K30-T 4.4.4

混淆

-dontwarn com.album.**

-keep class com.album.** { *;}

-keep interface com.album.** { *;}

// ucrop

-dontwarn com.yalantis.ucrop**

-keep class com.yalantis.ucrop** { *; }

-keep interface com.yalantis.ucrop** { *; }

感谢

关于MediaScannerConnection的内存泄露问题

协议

Mozilla Public License 2.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值