AppCompatImageView修改Icon顏色

在 Android 中,AppCompatImageView 中設(shè)置的 src 資源如果帶有透明度,再設(shè)置 tint 色值時(shí)可能會(huì)遇到一些問(wèn)題。具體來(lái)說(shuō),tint 會(huì)疊加到原始圖像的顏色上,但如果圖像本身包含透明度,結(jié)果可能不符合預(yù)期。

透明度會(huì)影響 tint 的顯示效果。例如,如果你的圖像有部分是半透明的,tint 顏色也會(huì)變得半透明。對(duì)于完全透明的部分,tint 可能不會(huì)顯示出來(lái)。
一般情況下,原圖上的透明度也會(huì)帶到你設(shè)置的tint色值上,比如原圖可能包含80%的不透明度,那么在你設(shè)置的新色值上也包含80%的不透明度。

為了更好地控制 tint 和透明度,你可以嘗試以下方法:

方法一:使用 ImageFilterView

ImageFilterView 是一個(gè)在 Android Jetpack 中的類,它可以對(duì)圖像應(yīng)用顏色過(guò)濾器和其他效果。它繼承自 AppCompatImageView,所以你可以直接使用它來(lái)實(shí)現(xiàn)你的需求。

<androidx.constraintlayout.utils.widget.ImageFilterView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_image"
    android:tint="@color/your_tint_color"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    />

方法二:在代碼中設(shè)置 tint 和 src

你可以在代碼中動(dòng)態(tài)設(shè)置 tint 和 src,確保順序和方式正確:

val imageView: AppCompatImageView = findViewById(R.id.imageView)
imageView.setImageResource(R.drawable.your_image)
imageView.setColorFilter(ContextCompat.getColor(this, R.color.your_tint_color), PorterDuff.Mode.SRC_IN)

方法三:使用 XML 屬性設(shè)置 tint

在 XML 中直接設(shè)置 tint 屬性:

<androidx.appcompat.widget.AppCompatImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_image"
    android:tint="@color/your_tint_color"
    android:tintMode="src_in"
    />

注意事項(xiàng)

  • 透明度的處理:如果你的圖像有透明部分且你希望 tint 也應(yīng)用到這些部分,可以嘗試不同的 tintMode(如 src_in、src_atop 等)來(lái)調(diào)整效果。
  • 圖像格式:確保你的圖像格式(如 PNG)支持透明度。
  • API 級(jí)別:某些屬性和方法可能在較低的 API 級(jí)別上不完全支持,確保你測(cè)試的設(shè)備和目標(biāo) API 級(jí)別一致。

示例

假設(shè)你有一個(gè)帶透明度的圖像 @drawable/your_image 和一個(gè)顏色 @color/your_tint_color:

val imageView: AppCompatImageView = findViewById(R.id.imageView)
imageView.setImageResource(R.drawable.your_image)
imageView.setColorFilter(ContextCompat.getColor(this, R.color.your_tint_color), PorterDuff.Mode.SRC_IN)

或者在 XML 中:

<androidx.appcompat.widget.AppCompatImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_image"
    android:tint="@color/your_tint_color"
    android:tintMode="src_in"
    />

通過(guò)這些方法,可以更好地控制 tint 顏色和圖像透明度的組合效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文會(huì)不定期更新,推薦watch下項(xiàng)目。如果喜歡請(qǐng)star,如果覺(jué)得有紕漏請(qǐng)?zhí)峤籭ssue,如果你有更好的點(diǎn)子可以...
    天之界線2010閱讀 18,880評(píng)論 19 153
  • SVG是什么,使用它的優(yōu)勢(shì) SVG是指可伸縮矢量圖形 (Scalable Vector Graphics),它不同...
    黃海佳閱讀 4,366評(píng)論 0 4
  • 1.前言 開(kāi)發(fā)中經(jīng)常會(huì)遇到通過(guò)替換圖形,來(lái)區(qū)分控件選中和未選中兩種狀態(tài)。圖形資源相對(duì)顏色值而言肯定要大不少,而且對(duì)...
    lanceJin閱讀 7,028評(píng)論 0 7
  • 現(xiàn)在存在的問(wèn)題 如果一個(gè)APP中可以根據(jù)用戶喜好,更改APP中圖片的顏色,則設(shè)計(jì)師必須重復(fù)修改圖片,開(kāi)發(fā)者圖片文件...
    叫我小黑閱讀 1,354評(píng)論 0 1
  • 顏色相關(guān):color、shader、colorFilter、Xfermode 1.直接設(shè)置顏色 setColor(...
    jadefly閱讀 1,217評(píng)論 0 0

友情鏈接更多精彩內(nèi)容