Git Product home page Git Product logo

monkey's Introduction

monkey

一个基于Matisse的选择Android设备本地图片以及视频的框架。

在Matisse的基础上新增如功能:

  • 支持拍照,录像
  • 支持日期分组,可以按照拍摄时间进行分组,更加一目了然
  • 返回媒体文件多种元数据。包括拍摄时间,文件大小,图片长度,图片宽度,视频时长 经纬度,本地路径,Uri,本地媒体库Id,mineType类型等数据
  • 新增多种监听器,item被勾选监听器,获取最新一条文件监听器等
  • 支持拍摄后刷新并停留在选择页面,并且勾选拍摄的媒体文件,可继续勾选
  • 支持单选模式
  • 支持自定义页面的Toolbar布局
  • 支持滚动指定日期

Download

Gradle:

repositories {
    jcenter()
}

dependencies {
    compile 'com.miraclehen:monkey:1.1.1@aar '
}

Maven:

<dependency>
  <groupId>com.miraclehen</groupId>
  <artifactId>monkey</artifactId>
  <version>1.1.1</version>
  <type>pom</type>
</dependency>

Usage

simple use

多选图片

Monkey.from(MainActivity.this)
                        .choose(MimeType.ofImageExcludeGif())
                        .countable(true)
                        .maxSelectable(20)
                        .imageEngine(new GlideEngine())
                        .forResult(REQUEST_CODE_CHOOSE);

单选图片

Monkey.from(MainActivity.this)
                        .choose(MimeType.ofImageExcludeGif())
                        .singleResultModel(true)
                        .imageEngine(new GlideEngine())
                        .forResult(REQUEST_CODE_CHOOSE);

多选视频

 Monkey.from(MainActivity.this)
                        .choose(MimeType.ofVideo())
                        .countable(true)
                        .maxSelectable(20)
                        .imageEngine(new GlideEngine())
                        .forResult(REQUEST_CODE_CHOOSE);

单选视频

Monkey.from(MainActivity.this)
                        .choose(MimeType.ofVideo())
                        .singleResultModel(true)
                        .imageEngine(new GlideEngine())
                        .forResult(REQUEST_CODE_CHOOSE);

advance use

Monkey.from(MainActivity.this)
                        .choose(MimeType.ofImageExcludeGif())
                        .countable(false)
                        .spanCount(4)
                        .selectedMediaItem(dataList)
                        .captureFinishBack(false)
                        .captureType(CaptureType.Image)
                        .captureStrategy(new CaptureStrategy(true, "com.miraclehen.sample.fileprovider"))
                        .maxSelectable(20)
                        .toolbarLayoutId(R.layout.layout_custom_tool_bar)
                        .theme(R.style.ZhihuTheme1)
                        .groupByDate(true)
                        .inflateItemViewCallback(new InflateItemViewCallback() {
                            @Override
                            public void callback(MediaItem mediaItem, MediaGrid mediaGrid) {
                                ImageView imageView = new ImageView(MainActivity.this);
                                imageView.setImageResource(R.drawable.img_cloud);
                                mediaGrid.addView(imageView, new FrameLayout.LayoutParams(UIUtils.convertDIPToPixels(MainActivity.this, 25),
                                        UIUtils.convertDIPToPixels(MainActivity.this, 25), Gravity.START | Gravity.TOP));
                            }
                        })
                        .checkListener(new OnItemCheckChangeListener() {
                            @Override
                            public void onCheck(MediaItem mediaItem, boolean check) {
                                Log.i(TAG, mediaItem.toString() + "  \n" + check);
                            }
                        })
                        .thumbnailScale(0.85f)
                        .imageEngine(new GlideEngine())
                        .forResult(REQUEST_CODE_CHOOSE);

add FileProvider

当拍照或者录像时候,monkey需要和相机程序进行数据交互。 在android7.0以上,应用之间数据传输无法直接通过 "file://" 进行数据交互。需要通过FileProvider进行交互: 在你的AndroidManifest.xml添加:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="你的包名称.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths_public"></meta-data>
        </provider>

创建 在res文件下,创建xml文件夹,并且创建file_paths_public.xml文件,文件内容如下

<paths>
    <external-path
        name="my_images"
        path="Pictures"/>

    <external-path
        name="my_video"
        path="Movies"/>
</paths>

attribute

attribute description
theme Activity的主题颜色,默认支持两种(R.style.Matisse_Zhihu,R.style.Dracula)
countable 是否支持数字选中模式
mimeTypeSet 显示的数据MimeType集合
themeId 窗口主题,默认提供两种。R.style.Matisse_Zhihu 以及 R.style.Matisse_Dracula
orientation 数据显示屏幕方向
countable 是否支持勾选可数
maxSelectable 最大可选中数量
addFilter 选中过滤器。在勾选时候会触发此过滤器。假如你的application不想要超过5M的视频文件,你就可以使用此过滤器
autoScrollToDate 滚动到指定日期位置,毫秒为单位
captureStrategy 拍摄策略,提供一个FileProvider。在android7.0,应用间访问文件数据需要通过FileProvider
captureType 拍摄类型。提供三个枚举类型,Image为提供拍照功能,Video为提供录像功能,None均无
captureFinishBack 拍摄结束后是否结束MonkeyActivity直接返回拍摄数据
restrictOrientation 拍摄手机方向限制。枚举值
spanCount 每行显示多少item
thumbnailScale 缩略图压缩值大小。0.0~1.0.建议不要低于0.8
imageEngine 图片加载引擎。支持Glide和Picasso。强烈建议使用Glide,Picasso对Uri支持不是很友好
forResult Activity返回结果码
groupByDate 是否支持日期分组
selectedMediaItem 从外部传入默认已勾选的MediaItem列表
checkListener MediaItem被勾选或者反勾选监听器
singleResultModel 是否启动单一结果模式。如果为true,那么当点击其中一个MediaItem,直接返回数据,适合在选择用户头像等操作。
toolbarLayoutId 自定义Toolbar布局Id。注意!View需要设置特定的Id,参考sample
catchNewestCallback 获取日期最新的一条数据MediaItem之后,回调相应的方法
inflateItemViewCallback 生成item布局时候回调,可以对Item布局进行进一步自定义
autoScrollToDate 第一次显示数据的时候,自动滚动到相应日期。如果没有匹配对应的值,那么会滚动到最近的日期值

monkey's People

Contributors

miraclehen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

monkey's Issues

IncompatibleClassChangeError Getting error. Please do need full. Thanks

java.lang.IncompatibleClassChangeError: Class 'com.miraclehen.monkey.MonkeyActivity' does not implement interface 'androidx.lifecycle.LifecycleOwner' in call to 'androidx.lifecycle.Lifecycle androidx.lifecycle.LifecycleOwner.getLifecycle()' (declaration of 'androidx.lifecycle.LiveData' appears in /data/app/com.planoly.storiesedit-2/split_lib_dependencies_apk.apk)
at androidx.lifecycle.LiveData.observe(LiveData.java:172)
at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
at com.miraclehen.monkey.model.AlbumCollection.loadAlbums(AlbumCollection.java:102)
at com.miraclehen.monkey.MonkeyActivity.loadAlbums(MonkeyActivity.java:173)
at com.miraclehen.monkey.MonkeyActivity.requestReadStoragePermission(MonkeyActivity.java:618)
at com.miraclehen.monkey.MonkeyActivity.onCreate(MonkeyActivity.java:168)
at android.app.Activity.performCreate(Activity.java:6857)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2676)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2784)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6238)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.