天天看點

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

原文位址 Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用 | Stars-One的雜貨小窩

本篇講解下關于Image的使用及使用Coil開源庫異步加載網絡圖檔顯示

本系列以往文章請檢視此分類連結Jetpack compose學習

首先,先看下參數

可以看到Image圖檔的參數大體上是和是Icon一樣,基本使用呢,和上一篇講的Icon類似,我們加載一張本地的圖檔,代碼如下

比較基礎的參數這裡就不再贅述了,這裡主要講解下面的其他參數

圖檔對齊方向,前提是Image設定了寬高,取值為<code>Alignment</code>的定義的枚舉

設定寬高是通過<code>Modifier.size()</code>來設定

取值有圖中幾種:

注意: 圖中特意方框圍起來的,其傳回值不是<code>Alignment</code>類型的,這幾個并不能取,你選了的話編輯器也會貼心的給出錯誤提示的 笑
Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

這個alignment參數有九種取值,将一個固定的長方形分為九塊,如下圖所示

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

可以看到實際效果中,圖檔是居中對齊的,其他效果也就不一一展示了

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

圖檔縮放設定,和原生的ImageView的scaleType屬性類似,取值是<code>ContentScale</code>的枚舉,預設是<code>ContentScale.Fit</code>(即自适應)

<code>ContentScale.Crop</code> 裁剪

<code>ContentScale.FillBounds</code> 拉伸圖檔寬高填滿形狀

<code>ContentScale.FillHeight</code> 拉伸圖檔高度填滿高度

<code>ContentScale.FillWidth</code> 拉伸圖檔寬填滿寬度

<code>ContentScale.Fit</code>

<code>ContentScale.Inside</code>

<code>ContentScale.None</code> 不縮放

這個也是需要Image設定寬高才可以看出效果
Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

下面示範各種不同效果的Image(由于Fit是預設的,下面就沒展示出來了)

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用
Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

代碼如下

透明度,數值類型為float,數值範圍為<code>0f-1f</code>之間,預設是1f

如下代碼所示

效果如下圖所示

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

着色效果,可以使用顔色對圖檔進行混合加工,有下面三種方法進行設定

<code>ColorFilter.tint(Color, BlendMode)</code> 着色效果

<code>ColorFilter.lighting(Color,Color)</code>

<code>ColorFilter.colorMatrix(colorMatrix)</code>

這個我不是研究太多,各位可以百度參考下其他大神寫的文章

這裡就講個小例子,改變圖檔的顔色

美工給的圖示有些是單一的顔色,比如說選中後是藍色,不選中是灰色的 但有時候項目需要更改顔色,如選中後要改為綠色,這個時候得要美工再次切圖,十分麻煩

這個時候我們可以這個屬性,去修改顔色,如下面代碼

效果:

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

<code>R.drawable.eye_show</code>圖檔原本是灰色的,現在被我們渲染成了綠色,這種方法比較适合那種單一顔色的圖示檔案

而且有了這種方法,我們甚至隻需要一種灰色的圖示即可,藍色的圖示就不需要,可以省下不少apk的體積大小

至于更多内容,需要各位去研究啦...😄

上述我們一直使用的是本地圖檔,如果是網絡圖檔,該怎麼辦呢?以往我們都是使用Glide加載,但現在由于Compose是采用State狀态監測機制去渲染UI,是以如果我們自己去實作就會十分麻煩

剛好現在已經有大神整了架構,我們拿來使用即可

Coil這個架構是<code>Accompanist</code>的子庫,那麼<code>Accompanist</code>是什麼呢?

Accompanist 是一組旨在擴充 <code>Jetpack Compose</code> 功能的第三方庫集合,這個庫中所提供的功能是開發者普遍需要的。

注: 寫這篇文章後發現,在<code>Accompanist</code>的<code>0.16.0</code>版本更新日志中,移除了<code>Coil</code>等圖檔加載的庫,<code>Coil</code>好像是單獨出來了,下面是摘自官方的更新說明:

Coil, Glide and Image Loading Core have been removed After being deprecated in v0.14.0, it's time to remove the <code>coil</code>, <code>glide</code> and <code>imageloading-core</code> libraries. Some discussion about this can be seen on the Kotlin Slack: https://kotlinlang.slack.com/archives/CJLTWPH7S/p1627482619344000. TL;DR: the recommendation is to move to Coil Compose.

遷移到此開源庫coil-kt/coil: Image loading for Android backed by Kotlin Coroutines.

基本流程,先導依賴

圖檔的<code>painter</code>參數使用<code>rememberImagePainter</code>此方法,可傳入一個網絡圖檔

PS:不要忘記加網絡權限<code>&lt;uses-permission android:name="android.permission.INTERNET" /&gt;</code>哦!!
Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

占位圖 placeholder

過渡 transitions

變化效果 transformations

由于是網絡圖檔,我們在預覽界面是無法看到有圖檔的,這個時候我們可以考慮設定下占位圖檔,好友善調試UI

預覽界面可以看到占位圖

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

加載網絡的圖檔過渡效果:

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

可能圖中看不出圓形裁剪,我們可以加上背景看看,圖檔其實已經是被裁剪了的

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用
目前,Coil自帶了兩種過渡效果:
<code>CrossfadeTransition</code> 從目前可繪制到成功/錯誤可繪制的淡入淡出(即上文代碼出現的<code>crossfade</code>) <code>Transition.NONE</code>它在Target沒有動畫的情況下立即設定可繪制對象。 想要實作自定義,可以參考下CrossfadeTransition源代碼,本文就不過多展開了

transformations主要是變化的意思,官方的解釋是

transformations允許您在Drawable從請求傳回之前修改圖像的像素資料。

Coil預設提供了4種類型 <code>blur</code>(高斯模糊) <code>circle crop</code>(圓形裁剪) <code>grayscale</code>(灰階) <code>rounded corners</code>(圓角)

對應的代碼如下:

效果如下所示

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

源代碼:

需要添加依賴插件包

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用
PS:上述代碼是我自己大概摸索出來的,沒想到竟然能用...😕 官方給的文檔一直沒有個标準的使用例子,也不知道上面這樣寫對不對,僅供參考😓

下面這個好像是正确的代碼,image可以同時支援加載gif或者是jpg等圖檔

如gif一樣,也是要加個插件依賴,之後注冊即可

補充

下面的都是一樣的,不過使用Coil加載圖檔會出現圖檔放大後失真問題,是以有另外款開源庫推薦landscapist

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

Jetpack Compose - Image_樂翁龍-CSDN部落格

Image - Jetpack Compose中文文檔

Accompanist中文翻譯文檔 - Jetpack Compose中文文檔

Accompanist官方文檔

Coil官方文檔之Jetpack Compose -

Android-使用 SetColorFilter 神奇地改變圖檔的顔色_段淺淺的部落格-CSDN部落格_setcolorfilter

提問之前,請先看提問須知

點選右側圖示發起提問

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

或者加入QQ群一起學習

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用

TornadoFx學習交流群:1071184701

Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用
Jetpack Compose學習(4)——Image(圖檔)使用及Coil圖檔異步加載庫使用
下一篇: Redis

繼續閱讀