BindingAdapter1.kt 2.07 KB
Newer Older
1 2 3 4 5 6 7 8 9
package com.yidianling.common.binding

import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.view.View
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.ydl.ydl_image.module.GlideApp

万齐军 committed
10 11
@BindingAdapter("imageUrl", "circle", requireAll = false)
fun setImageUrl(imageView: ImageView, url: String?, circle: Boolean = false) {
12
    if (url.isNullOrEmpty()) return
万齐军 committed
13 14 15 16 17
    if (circle) {
        GlideApp.with(imageView).load(url).circleCrop().into(imageView)
    } else {
        GlideApp.with(imageView).load(url).into(imageView)
    }
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
}


@BindingAdapter(
    value = [
        "shapeBg",
        "shapeStrokeColor",
        "shapeStrokeWidth",
        "shapeRadius",
        "shape"
    ],
    requireAll = false
)
fun View.setCustomStyle(
    shapeBg: Int = Color.TRANSPARENT,                  // 背景颜色
    shapeStrokeColor: Int = Color.TRANSPARENT,                 // 边框颜色
    shapeStrokeWidth: Float = 0f,                              // 边框宽度
    shapeRadius: Float = 0f,                                    // 圆角宽度
    shape: Int = GradientDrawable.RECTANGLE               // Shape样式 默认矩形
) {
    val gradientDrawable: GradientDrawable = if (background as? GradientDrawable == null) {
        GradientDrawable()
    } else {
        background as GradientDrawable
    }
43
    val density = resources.displayMetrics.density
44 45
    gradientDrawable.setColor(shapeBg)
    gradientDrawable.setStroke(
46
        (shapeStrokeWidth * density).toInt(),
47 48
        shapeStrokeColor
    )
49 50
    val radius = density * shapeRadius
    gradientDrawable.cornerRadius = radius
51 52 53 54 55 56 57 58 59
    when (shape) {
        GradientDrawable.RECTANGLE -> gradientDrawable.shape = GradientDrawable.RECTANGLE
        GradientDrawable.OVAL -> gradientDrawable.shape = GradientDrawable.OVAL
        GradientDrawable.LINE -> gradientDrawable.shape = GradientDrawable.LINE
        GradientDrawable.RING -> gradientDrawable.shape = GradientDrawable.RING
        else -> gradientDrawable.shape = GradientDrawable.RECTANGLE
    }
    background = gradientDrawable
}