您好,登錄后才能下訂單哦!
在實際開發中,圖片選擇器一直都是必不可少的一個部分,不管是 QQ 頭像的設置,還是發送一條裝逼的微信朋友圈,都要用到圖片選擇器來給用戶選擇他們想要上傳的圖片,最近知乎開源了一款圖片選擇庫 Matisse 簡直美哭了,而且完全遵循 Android 交互設計規范,實在是很良心。
在開始正文之前,先欣賞一下這個圖片選擇器的效果
是不是感覺相當的簡潔好看,反正我是這么認為的。
Gradle:
repositories {
jcenter()
}
dependencies {
compile 'com.zhihu.android:matisse:0.4.3'
}
有一點要注意一下, 這個圖片選擇庫是使用 Glide 或 Picasso 作為圖片加載引擎
如果你使用 Glide 作為你的圖片加載引擎,請添加 Glide 的 README 上所說的規則,以及添加額外的規則:
-dontwarn com.squareup.picasso.**
如果你使用 Picasso 作為你的圖片加載引擎,請添加 Picasso 的 README 上所說的規則,以及添加額外的規則:
-dontwarn com.bumptech.glide.**
在正式寫代碼之前,有兩個相關的權限需要先申請:
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
所以,如果你的 APP 是跑在 Android 6.0+ 的話,你需要在下個步驟之前處理一下運行時權限。
我們可以在平常的 Activity 或 Fragment 中啟動 MatisseActivity
Matisse.from(MainActivity.this)
.choose(MimeType.ofAll(), false) // 選擇 mime 的類型
.countable(true)
.maxSelectable(9) // 圖片選擇的最多數量
.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
.thumbnailScale(0.85f) // 縮略圖的比例
.imageEngine(new GlideEngine()) // 使用的圖片加載引擎
.forResult(REQUEST_CODE_CHOOSE); // 設置作為標記的請求碼
在啟動圖片選擇器的 Activity 或 Fragment 中的 onActivityResult() 進行結果的回調處理
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);
}
}
Matisse 支持以下的 mime 類型
Mime type | File extensions | Media type |
---|---|---|
image/jpeg | jpg, jpeg | image |
image/png | png | image |
image/gif | gif | image |
imagex-ms-bmp | bmp | image |
video/mpeg | mpeg, mpg | video |
video/mp4 | mp4, m4v | video |
video/quicktime | mov | video |
video/3gpp | 3gp, 3gpp | video |
video/3gpp2 | 3g2, 3gpp2 | video |
video/x-matroska | mkv | video |
video/webm | webm | video |
video/mp2ts | ts | video |
video/avi | avi | video |
默認情況下,所有的圖像和視頻都將顯示在 Matisse 中,而且你并不能通過以下方法來限制可選擇的 mime 類型:
不過你可以讓 Matisse 只顯示一種媒體類型,如果
showSingleMediaType(true)
默認情況
在縮略圖的右上角有一個復選標記,讓你不僅可以選擇一個圖像
自動增長的數目
使用 countable(true)
來顯示一個從 1 開始的數字
最大的數字數量
使用 maxSelectable(int maxSelectable)
來限制可選擇的最大數目
使用 restrictOrientation*(@ScreenOrientation int orientation)
來設置圖像選擇和預覽活動所需的方向。
如果你想要固定的跨度計數,請使用 spanCount(int spanCount)
,當方向更改時,范圍計數將保持不變。
如果希望可以靈活地適應不同屏幕的網格大小,請使用 spanCount(int spanCount)
,該值不一定被應用,因為圖片網格應該填滿視圖容器。測量的圖片網格的大小將盡可能接近該值。
使用 thumnailScale(float scale)
來設置縮略圖位圖相對于視圖大小的縮放比例,而且它應該是(0.0,1.0)中的浮點值。
在 Matisse 中有兩種內置的主題:
當啟動 Matisse 的時候,調用 theme(@styleRes int themeId) 方法來使用其中一種主題
Matisse.from(MainActivity.this)
...
.theme(R.style.Matisse_Zhihu | R.style.Matisse_Dracula)
.forResult(REQUEST_CODE_CHOOSE);
從兩個內置主題,甚至是他們的父母派生自定義主題,你可以自定義 Matisse 的外觀
這些屬性(在 attrs.xml 中定義)可以修改:
屬性 | 作用 |
---|---|
colorPrimary | 應用欄的顏色 |
colorPrimaryDark | 狀態欄的較暗變體 |
toolbar: toolbar | toolbar 的風格 |
album.dropdown.title.color | 專輯名稱下的專輯中的下拉列表中的顏色 |
album.dropdown.count.color | 工具欄元素的顏色,元素包括導航圖標,所選的相冊標題和右側的下拉箭頭圖標 |
album.thumbnail.placeholder | 相冊縮略圖的占位符 |
album.emptyView | 繪制圖片的空視圖 |
album.emptyView.textColor | 空白視圖的文字顏色 |
item.placeholder | 媒體網格的占位符顏色或 drawable |
page.bg | Activity 或 Fragment 頁面的背景顏色或 drawable |
bottomToolbar.preview.textColor | 底部工具欄的背景顏色或 drawable |
bottomToolbar.apply.textColor | 預覽按鈕文本的底部工具欄上的顏色 |
listPopupWindwoStyle | 專輯列表的下拉菜單樣式 |
capture.textColor | 可能出現在頂部的捕獲網格的文本顏色 |
以上便是本文的全部內容,如果覺得寫得還可以的話,希望來一波關注和喜歡。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。