MCPcopy
hub / github.com/zhihu/Matisse

github.com/zhihu/Matisse @v0.5.2 sqlite

repository ↗ · DeepWiki ↗ · release v0.5.2 ↗
417 symbols 1,105 edges 48 files 63 documented · 15%
README

Image

Matisse

Build Status Download

Matisse is a well-designed local image and video selector for Android. You can
- Use it in Activity or Fragment - Select images including JPEG, PNG, GIF and videos including MPEG, MP4 - Apply different themes, including two built-in themes and custom themes - Different image loaders - Define custom filter rules - More to find out yourself

Zhihu Style Dracula Style Preview

Download

Gradle:

repositories {
    jcenter()
}

dependencies {
    compile 'com.zhihu.android:matisse:$latest_version'
}

Check out Matisse releases to see more unstable versions.

ProGuard

If you use Glide as your image engine, add rules as Glide's README says.
And add extra rule:

-dontwarn com.squareup.picasso.**

If you use Picasso as your image engine, add rules as Picasso's README says.
And add extra rule:

-dontwarn com.bumptech.glide.**

Attention: The above progurad rules are correct.

How do I use Matisse?

Permission

The library requires two permissions: - android.permission.READ_EXTERNAL_STORAGE - android.permission.WRITE_EXTERNAL_STORAGE

So if you are targeting Android 6.0+, you need to handle runtime permission request before next step.

Simple usage snippet


Start MatisseActivity from current Activity or Fragment:

Matisse.from(MainActivity.this)
        .choose(MimeType.allOf())
        .countable(true)
        .maxSelectable(9)
        .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
        .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
        .thumbnailScale(0.85f)
        .imageEngine(new GlideEngine())
        .forResult(REQUEST_CODE_CHOOSE);

Themes

There are two built-in themes you can use to start MatisseActivity: - R.style.Matisse_Zhihu (light mode) - R.style.Matisse_Dracula (dark mode)

And Also you can define your own theme as you wish.

Receive Result

In onActivityResult() callback of the starting Activity or Fragment:

List<Uri> mSelected;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
        mSelected = Matisse.obtainResult(data);
        Log.d("Matisse", "mSelected: " + mSelected);
    }
}

For Glide V4

To be honest,the library can't supply GlideEngine for Glide both v3 and v4 at the same time. (Anyone who have good idea to achieve this. PR is welcomed)

GlideEngine with Glide v3 is default.

So if your project's glide version is 4.0+ ,then you must realize GlideEngine by yourself. More details could refer with Glide4Engine in the sample.

More

Find more details about Matisse in wiki.

Contributing

Matisse is an Open Source Project

Thanks

This library is inspired by Laevatein and uses some of its source code.

License

Copyright 2017 Zhihu Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Extension points exported contracts — how you extend this code

ImageEngine (Interface)
Image loader interface. There are predefined com.zhihu.matisse.engine.impl.GlideEngine and {@link com.zhihu.mati [6 implementers]
matisse/src/main/java/com/zhihu/matisse/engine/ImageEngine.java
OnFragmentInteractionListener (Interface)
PreViewItemFragment 和 BasePreViewActivity 通信的接口 ,为了方便拿到 ImageViewTouch 的点击事件 [9 implementers]
matisse/src/main/java/com/zhihu/matisse/listener/OnFragmentInteractionListener.java
OnCheckedListener (Interface)
when original is enabled , callback immediately when user check or uncheck original. [1 implementers]
matisse/src/main/java/com/zhihu/matisse/listener/OnCheckedListener.java
AlbumMediaCallbacks (Interface)
(no doc) [2 implementers]
matisse/src/main/java/com/zhihu/matisse/internal/model/AlbumMediaCollection.java
CheckStateListener (Interface)
(no doc) [2 implementers]
matisse/src/main/java/com/zhihu/matisse/internal/ui/adapter/AlbumMediaAdapter.java

Core symbols most depended-on inside this repo

getInstance
called by 27
matisse/src/main/java/com/zhihu/matisse/internal/entity/SelectionSpec.java
valueOf
called by 23
matisse/src/main/java/com/zhihu/matisse/internal/entity/Item.java
getContentUri
called by 15
matisse/src/main/java/com/zhihu/matisse/internal/entity/Item.java
arraySetOf
called by 14
matisse/src/main/java/com/zhihu/matisse/MimeType.java
setChecked
called by 14
matisse/src/main/java/com/zhihu/matisse/internal/ui/widget/MediaGrid.java
setEnabled
called by 14
matisse/src/main/java/com/zhihu/matisse/internal/ui/widget/CheckView.java
load
called by 12
matisse/src/main/java/com/zhihu/matisse/internal/model/AlbumMediaCollection.java
add
called by 12
matisse/src/main/java/com/zhihu/matisse/internal/model/SelectedItemCollection.java

Shape

Method 355
Class 49
Interface 12
Enum 1

Languages

Java100%

Modules by API surface

matisse/src/main/java/com/zhihu/matisse/internal/ui/adapter/AlbumMediaAdapter.java27 symbols
matisse/src/main/java/com/zhihu/matisse/internal/model/SelectedItemCollection.java22 symbols
matisse/src/main/java/com/zhihu/matisse/ui/MatisseActivity.java21 symbols
matisse/src/main/java/com/zhihu/matisse/internal/ui/widget/MediaGrid.java21 symbols
matisse/src/main/java/com/zhihu/matisse/SelectionCreator.java21 symbols
sample/src/main/java/com/zhihu/matisse/sample/SampleActivity.java17 symbols
matisse/src/main/java/com/zhihu/matisse/internal/ui/MediaSelectionFragment.java15 symbols
matisse/src/main/java/com/zhihu/matisse/internal/ui/BasePreviewActivity.java14 symbols
matisse/src/main/java/com/zhihu/matisse/internal/model/AlbumCollection.java14 symbols
matisse/src/main/java/com/zhihu/matisse/internal/entity/Item.java14 symbols
matisse/src/main/java/com/zhihu/matisse/internal/entity/Album.java14 symbols
matisse/src/main/java/com/zhihu/matisse/internal/ui/widget/CheckView.java13 symbols

For agents

$ claude mcp add Matisse \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact