Android心得总结Android开源组件三方架构分析

Android仿微信多媒体选择器 - SmartMediaPic

2019-03-15  本文已影响15人  BzCoder

项目GitHub:https://github.com/BzCoder/SmartMediaPicker

2019.4.23更新 版本已更新至【1.1.0】详情参考GitHub。

多媒体选择器 SmartMediaPicker

好久没写简书了,这次带来的是自己封装的一个多媒体选择器。这是一款方便好用的仿微信多媒体选择器,集合和图片选择,拍照,拍摄短视频功能。主要还是站在了巨人的肩膀上,封装了以下两个库,修复仿微信拍照Android控件中存在的几个BUG。也欢迎在留言中提出更多的使用配置需求。

演示

图片选择
仿微信拍照录像

改动

使用方法

gradle添加:


    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }



    dependencies {
            implementation 'com.github.BzCoder:SmartMediaPicker:1.0.7'
    }

代码添加:

        builder = SmartMediaPicker.builder(this)
                //最大图片选择数目
                .withMaxImageSelectable(5)
                //最大视频选择数目
                .withMaxVideoSelectable(1)
                //图片选择器是否显示数字
                .withCountable(true)
                //最大视频长度
                .withMaxVideoLength(15 * 1000)
                //最大视频文件大小 单位MB
                .withMaxVideoSize(1)
                //最大图片高度 默认1920
                .withMaxHeight(1920)
                //最大图片宽度 默认1920
                .withMaxWidth(1920)
                //最大图片大小 单位MB
                .withMaxImageSize(5)
                //设置图片加载引擎
                .withImageEngine(new Glide4Engine())
                //弹出类别,默认弹出底部选择栏,也可以选择单独跳转
                .withMediaPickerType(MediaPickerEnum.BOTH)
                .build()
                .show();

ImageEngine

需要自己实现图片加载,图片加载类需要实现ImageEngine接口,当然也可以直接复制一下代码:

/**
 * {@link ImageEngine} implementation using Glide.
 */

public class Glide4Engine implements ImageEngine {

    @Override
    public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
        Glide.with(context)
                .asBitmap() // some .jpeg files are actually gif
                .load(uri)
                .apply(new RequestOptions()
                        .override(resize, resize)
                        .placeholder(placeholder)
                        .centerCrop())
                .into(imageView);
    }

    @Override
    public void loadGifThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView,
                                 Uri uri) {
        Glide.with(context)
                .asBitmap() // some .jpeg files are actually gif
                .load(uri)
                .apply(new RequestOptions()
                        .override(resize, resize)
                        .placeholder(placeholder)
                        .centerCrop())
                .into(imageView);
    }

    @Override
    public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
        Glide.with(context)
                .load(uri)
                .apply(new RequestOptions()
                        .override(resizeX, resizeY)
                        .priority(Priority.HIGH)
                        .fitCenter())
                .into(imageView);
    }

    @Override
    public void loadGifImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
        Glide.with(context)
                .asGif()
                .load(uri)
                .apply(new RequestOptions()
                        .override(resizeX, resizeY)
                        .priority(Priority.HIGH)
                        .fitCenter())
                .into(imageView);
    }

    @Override
    public boolean supportAnimatedGif() {
        return true;
    }

}

实用工具类:

获取选择的资源:

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        List<String> resultData = SmartMediaPicker.getResultData(this, requestCode, resultCode, data);
        if (resultData != null && resultData.size() > 0) {
            tv_path.setText(Arrays.toString(resultData.toArray()));
        } else {
            tv_path.setText("NO DATA");
        }
    }

如果遇到使用问题,欢迎留言。

上一篇下一篇

猜你喜欢

热点阅读