1、在build.gradle中添加依赖
implementation 'com.github.bumptech.glide:glide:4.13.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
implementation 'androidx.palette:palette:1.0.0'
2、添加网络权限
3、通过glide加载图片,并在图片加载成功的回调里,添加通过palette设置颜色的代码
Palette.from(resource!!.toBitmap())
.generate {
palette ->
palette?.let {
val inColor = it.vibrantSwatch?.rgb?:0
clMain.setBackgroundColor(inColor)
}
}
Glide.with(this)
.load("https://gimg2.baidu.com/image_search/src=https://www.mshxw.com/skin/sinaskin/image/nopic.gif")
.listener(object : RequestListener{
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target?,
isFirstResource: Boolean
): Boolean {
Log.e("TAG","Error loading image",e)
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
Palette.from(resource!!.toBitmap())
.generate {
palette ->
palette?.let {
val inColor = it.vibrantSwatch?.rgb?:0
clMain.setBackgroundColor(inColor)
}
}
return false
}
})
.into(imageMain)
运行结果:
背景色随着加载图片的不同而不同
注:
manifest文件:
buil.gradle文件:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.mypallet"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.6.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
implementation 'com.github.bumptech.glide:glide:4.13.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
implementation 'androidx.palette:palette:1.0.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
MainActivity:
package com.example.mypallet
import android.graphics.drawable.Drawable
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.graphics.drawable.toBitmap
import androidx.palette.graphics.Palette
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val clMain = findViewById(R.id.cl_main)
val imageMain = findViewById(R.id.iv_main)
Glide.with(this)
.load("https://gimg2.baidu.com/image_search/src=https://www.mshxw.com/skin/sinaskin/image/nopic.gif")
.listener(object : RequestListener{
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target?,
isFirstResource: Boolean
): Boolean {
Log.e("TAG","Error loading image",e)
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
Palette.from(resource!!.toBitmap())
.generate {
palette ->
palette?.let {
val inColor = it.vibrantSwatch?.rgb?:0
clMain.setBackgroundColor(inColor)
}
}
return false
}
})
.into(imageMain)
}
}
布局文件:



