前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一款强大的文件选择器-PrimPicker

一款强大的文件选择器-PrimPicker

作者头像
用户3045442
发布2018-10-09 12:01:28
5340
发布2018-10-09 12:01:28
举报
文章被收录于专栏:Android研究院Android研究院

微信公众号:Android研究院 关注可了解更多的Android知识,专注于移动领域,不知代码还有人生的哲学。 问题或建议,请公众号留言; 如果你觉得文章对你有帮助,欢迎赞赏[1]

PrimPicker

PrimPicker GitHub

PrimPicker is What ?

PrimPicker is a load local image and video selector for Android。

You Can :

  • select images include JPG PNG GIF BMP WEBP
  • select videos include MP4 3GP MPEG AVI
  • you impl image loaders
  • it in Activity or Fragment
  • More to commission find out yourself

select

perview

picker

evice-2018-06-12-104844.png

device-2018-06-12-104907.png

evice-2018-06-12-104805.png

!device-2018-06-12-110014 [320i].gif

How Do I Use ?

Gradle:

代码语言:javascript
复制
repositories {
    jcenter()
}

dependencies {
    compile 'com.prim.lib:prim-picker:1.0.4'
}

Permission:

代码语言:javascript
复制
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.CAMERA

如果运行Android 6.0+ 需要动态申请权限

Coding: 首先需要设置图片加载器,此处自己实现 ImageEngine 接口,好处:本库不用再导入图片加载库了,防止项目中图片加载库冲突或多个图片加载库

需要注意的是: 加载缩略图设置图片类型为centerCrop(); 加载预览图设置图片类型为fitCenter();

代码语言:javascript
复制
class ImageLoader : ImageEngine {
        override fun loadImageThumbnail(context: Context?, resize: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
            Glide.with(context).load(uri).asBitmap().placeholder(placeholder).override(resize, resize).centerCrop().into(view)
        }

        override fun loadImage(context: Context?, resizeX: Int, resizeY: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
            Glide.with(context).load(uri).asBitmap().placeholder(placeholder).override(resizeX, resizeY).fitCenter().into(view)
        }

        override fun loadGifThumbnail(context: Context?, resize: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
            Glide.with(context).load(uri).asGif().placeholder(placeholder).override(resize, resize).centerCrop().into(view)
        }

        override fun loadGifImage(context: Context?, resizeX: Int, resizeY: Int, placeholder: Drawable?, view: ImageView?, uri: Uri?) {
            Glide.with(context).load(uri).asGif().placeholder(placeholder).override(resizeX, resizeY).into(view)
        }

    }
代码语言:javascript
复制
 /**
     * 设置图片加载器,此处自己实现 ImageEngine 接口,
     * 好处:本库不用再导入图片加载库了,防止项目中图片加载库冲突或多个图片加载库
     *
     * @param imageLoader
     *         图片加载器
     *
     * @return PreviewBuilder
     */
    public PreviewBuilder setImageLoader(ImageEngine imageLoader) {
        this.selectSpec.imageLoader = imageLoader;
        return this;
    }
 ```
select file(选择文件)
代码语言:javascript
复制
      PrimPicker
            .with(this)
            .choose(MimeType.ofImage())
            .setSpanCount(3)
            .setMaxSelected(9)
            .setImageLoader(ImageLoader())
            .setShowSingleMediaType(true)
            .setCapture(true)
            .setDefaultItems(list)
            .lastGo(1001)
代码语言:javascript
复制
get select file date(获取选择文件的数据)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 1001 && resultCode == Activity.RESULT_OK) { list = PrimPicker.obtainItemsResult(data) pathlist = PrimPicker.obtainPathResult(data) } }

代码语言:javascript
复制
Get Uri or Path or MediaItem

/** 获取返回值 uri */ public static ArrayListobtainUriResult(Intent data) { return data.getParcelableArrayListExtra(EXTRA_RESULT_SELECTION); }

代码语言:javascript
复制
/** 获取返回值 string path */
public static ArrayList<String> obtainPathResult(Intent data) {
    return data.getStringArrayListExtra(EXTRA_RESULT_SELECTION_PATH);
}

/** 获取返回值 boolean 是否压缩 如压缩需自己处理,本库没有实现该功能 */
public static boolean obtainCompressResult(Intent data) {
    return data.getBooleanExtra(EXTRA_RESULT_COMPRESS, false);
}

/** 获取返回值 MediaItem 追加文件或预览文件时使用 */
public static ArrayList<MediaItem> obtainItemsResult(Intent data) {
    return data.getParcelableArrayListExtra(EXTRA_RESULT_ITEMS);
}
代码语言:javascript
复制
Add File(追加文件)

setDefaultItems(list) 选择文件得到的返回数据List<MediaItem> list 你可以对文件删除部分,想追加新的文件,将对list操作后的数据传入
代码语言:javascript
复制
     PrimPicker
            .with(this)
            .choose(MimeType.ofImage())
            .setSpanCount(3)
            .setMaxSelected(9)
            .setImageLoader(ImageLoader())
            .setShowSingleMediaType(true)
            .setCapture(true)
            .setDefaultItems(list)
            .lastGo(1001)
代码语言:javascript
复制
PerView File(对选择返回后的文件预览)
代码语言:javascript
复制
        PrimPicker
                .with(this)
                .preview(MimeType.ofImage())
                .setImageLoader(ImageLoader())
                .setPreviewItems(list)
                .lastGo(1001)
代码语言:javascript
复制
More API(更多API)

/** * 设置是否可以拍照和录像 * * @param capture * true 会在第一个显示view false 不显示 * * @return SelectBuilder */ public SelectBuilder setCapture(boolean capture) { selectSpec.capture = capture; return this; }

代码语言:javascript
复制
/**
 * 设置是否压缩视频和图片,压缩需要自己实现,此库没有实现该功能
 *
 * @param compress
 *         true 压缩 false 不压缩
 *
 * @return SelectBuilder
 */
public SelectBuilder setCompress(boolean compress) {
    selectSpec.compress = compress;
    return this;
}

/**
 * 设置所选视频的最大时长
 *
 * @param duration
 *         毫秒
 *
 * @return SelectBuilder
 */
public SelectBuilder setSelectVideoMaxDurationS(long duration) {
    selectSpec.selectVideoMaxDuration = duration;
    return this;
}

/**
 * 设置所选视频文件的最大的大小
 *
 * @param size
 *         KB
 *
 * @return SelectBuilder
 */
public SelectBuilder setSelectVideoMaxSizeKB(long size) {
    selectSpec.selectVideoMaxSizeKB = size;
    return this;
}

/**
 * 设置所选视频文件的最大的大小
 *
 * @param size
 *         M
 *
 * @return SelectBuilder
 */
public SelectBuilder setSelectVideoMaxSizeM(long size) {
    selectSpec.selectVideoMaxSizeM = size;
    return this;
}

/**
 * 设置预览界面可否进行选择和取消选择文件的操作,并与选择页面同步
 *
 * @param allow
 *         true 允许 false 不允许
 *
 * @return SelectBuilder
 */
public SelectBuilder setPerAllowSelect(boolean allow) {
    selectSpec.isPerAllowSelect = allow;
    return this;
}

/**
 * 设置点击item 预览点击的item 其他的无法预览
 * 注意此方法和{@link #setClickItemPerOrSelect(boolean) {@link #setPerViewEnable(boolean)}}
 * 两个方法相关setClickItemPerOrSelect setPerViewEnable 都为true时此方法生效,否则此方法不生效
 *
 * @param single
 *         true 只预览点击的item false 点击item如果可以进入预览页 则可以预览所有文件
 *
 * @return SelectBuilder
 */
public SelectBuilder setPerClickShowSingle(boolean single) {
    selectSpec.isPerClickShowSingle = single;
    return this;
}

/**
 * 在之前的数据基础上追加数据
 * 此数据是从选择文件中返回的数据{@link PrimPicker}.obtainItemsResult()
 * 本库没有存储此数据,主要是如果外部对文件数据删除,库中无法修改数据.
 * 所以从选择文件得到的数据,你可以做任何操作,然后将这些数据传入即可.
 *
 * @param mediaItems
 *         之前选择的数据
 *
 * @return SelectBuilder
 */
public SelectBuilder setDefaultItems(ArrayList<MediaItem> mediaItems) {
    selectSpec.mediaItems = mediaItems;
    return this;
}

/**
 * 设置选择器是否具备预览功能,默认开启预览功能
 *
 * @param enable
 *         true 开启预览功能 false 不开启预览功能
 *
 * @return SelectBuilder
 */
public SelectBuilder setPerViewEnable(boolean enable) {
    selectSpec.isPerViewEnable = enable;
    return this;
}

/**
 * 设置点击item 是预览还是选中
 *
 * @param enable
 *         true 点击item预览item ; FALSE 点击item选中item
 *
 * @return
 */
public SelectBuilder setClickItemPerOrSelect(boolean enable) {
    selectSpec.isClickItemPerOrSelect = enable;
    return this;
}

```

Thanks

Matisse source code.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android研究院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PrimPicker
    • PrimPicker is What ?
      • How Do I Use ?
        • Thanks
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档