Kotlin jetpack BindingAdapter 简单的给布局添加自定义属性

BindingAdapter 可以给布局加上自定义的注解进行自定义的处理。非常的好玩。

上布局文件

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="netWorkImage"
            type="String" />

        <variable
            name="localImage"
            type="int" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!--    加载网络图片-->
        <!--加载本地图片-->

        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            app:image="@{netWorkImage}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.45"
            tools:srcCompat="@tools:sample/avatars" />

        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            app:image="@{localImage}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.495"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.062"
            tools:srcCompat="@tools:sample/avatars" />

        <!--        如果有网络图片加载网络图片,没有则加载本地图片-->
        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            app:defaultLocalImage="@{localImage}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.834"
            app:netWorkImage="@{netWorkImage}"
            tools:srcCompat="@tools:sample/avatars" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

不出意外地个话,阁下应该没见过这些字段

因为这是自定义的

打开kapt

    implementation 'com.squareup.picasso:picasso:2.71828'

使用 picasso加载网络图片

新建

ImageViewBindingAdapter.kt

类 并只有这么些内容

package com.anguomob.jecpack.biningadapter

import android.graphics.Color
import android.text.TextUtils
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.anguomob.jecpack.R
import com.squareup.picasso.Picasso

//加载网络图片
@BindingAdapter("image")
fun setImage(iv: ImageView, url: String) {
    if (TextUtils.isEmpty(url).not()) {
        Picasso.get().load(url).placeholder(R.mipmap.ic_launcher)
            .into(iv)
    } else {
        iv.setBackgroundColor(Color.GRAY)
    }
}

//加载本地图片
@BindingAdapter("image")
fun setImage(iv: ImageView, resId: Int) {
    iv.setImageResource(resId)
}


//当网络图片为空的时候 加载本地图片
@BindingAdapter(value = arrayOf("netWorkImage", "defaultLocalImage"), requireAll = false)
fun setImage(iv: ImageView, url: String?, resId: Int) {
    if (TextUtils.isEmpty(url).not()) {
        Picasso.get().load(url).placeholder(R.mipmap.ic_launcher)
            .into(iv)
    } else {
        iv.setImageResource(resId)
    }
}

第一个 

image 注解 就是 加载网络图片。第二个是加载本地图片

第三个是

当网络图片为空的时候 加载本地图片

非常的好玩。

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/124893013