В этом посте о привязке данных мы рассмотрим, как загружать изображения, используя привязку данных с помощью glide в просмотре изображений.
Позвольте мне начать с того, что вам не нужны пользовательские изображения для этого. Используя адаптер привязки для объявления пользовательского атрибута, мы можем легко загрузить удаленное изображение в изображение с привязкой данных.
Я буду создавать пример проекта для этого. У него будет изображение в центре экрана. Я буду загружать изображение с моей страницы о .
Итак, начнем!
Добавление DataBinding
Чтобы включить привязку данных в свой проект, перейдите в build.gradle и добавьте следующие строки:
1
2
3
|
dataBinding { enabled = true } |
Также нам нужно включить зависимость для библиотеки скольжения:
1
2
|
implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' |
Теперь синхронизируйте проект, и все готово. Это так просто.
Создание макета
Теперь давайте создадим макет. У нас просто будет изображение в центре, а под ним текстовое представление
Вот файл макета activity_main.xml:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
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
43
44
|
<?xml version= "1.0" encoding= "utf-8" ?> <layout> <data> <variable name= "user" type= "com.example.databindingexample.User" /> </data> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" tools:context= ".MainActivity" > <TextView android:id= "@+id/tv_name" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "@{user.name}" app:layout_constraintBottom_toBottomOf= "parent" app:layout_constraintLeft_toLeftOf= "parent" app:layout_constraintRight_toRightOf= "parent" app:layout_constraintTop_toTopOf= "parent" tools:text= "This is sample text" /> <ImageView android:id= "@+id/imageView" android:layout_width= "100dp" android:layout_height= "100dp" android:layout_marginStart= "8dp" android:layout_marginTop= "8dp" android:layout_marginEnd= "8dp" android:layout_marginBottom= "8dp" app:layout_constraintBottom_toBottomOf= "parent" app:layout_constraintEnd_toEndOf= "parent" app:layout_constraintStart_toStartOf= "parent" app:layout_constraintTop_toBottomOf= "@id/tv_name" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout> |
Моделирование наших данных
Ничего фантастического. Для этого урока мы просто создадим объект пользователя, который будет иметь имя и URL-адрес изображения профиля. Вот как это выглядит:
1
2
3
4
|
class User { var name: String = "" } |
Подключение xml и Kotlin
Как макет получит пользовательскую переменную? Для этого нам нужно назначить объект макету с помощью кода.
В файле MainActivity.kt мы будем прикреплять наши файлы xml и kotlin. Вот наш файл MainActivity.kt:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package com.example.databindingexample import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import androidx.databinding.DataBindingUtil import com.example.databindingexample.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super .onCreate(savedInstanceState) val binding = DataBindingUtil.setContentView<ActivityMainBinding>( this , R.layout.activity_main) val user = User() user.name = "Ayusch" binding.user = user } } |
Сначала мы устанавливаем наш contentView с помощью DataBindingUtils, который предоставляется библиотекой привязки данных . Нужен универсальный тип. В нашем случае это будет ActivityMainBinding . Не паникуйте, если вы видите все красные для этого. Это сгенерированный файл, и вам нужно будет собрать свой проект один раз, чтобы получить его.
Использование DataBinding с ImageView
Теперь здесь происходит волшебство. Здесь мы увидим, как загрузить изображение в наш просмотр изображений, используя привязку данных с помощью glide.
Прежде всего, нам нужно создать BindingAdapter, который будет иметь собственную логику для загрузки нашего изображения с помощью glide. Это простой метод с аннотацией BindingAdapter и атрибутом (ами) для привязки.
Посмотрим, как это работает. В нашем пользовательском классе мы создадим открытый статический метод loadImage. Это займет два параметра. Во-первых, само представление, а затем URL-адрес изображения.
Помните: метод должен быть общедоступным static, и первым параметром будет представление. Это очень важно.
1
2
3
4
5
6
7
8
9
|
companion object { @JvmStatic @BindingAdapter ( "profileImage" ) fun loadImage(view: ImageView, profileImage: String) { Glide.with(view.context) .load(profileImage) .into(view) } } |
Затем мы можем загрузить изображение в imageview с помощью Glide. Мы все знакомы с этим.
Теперь, чтобы использовать привязку данных с изображением для загрузки изображений, нам нужно указать изображению использовать наш собственный адаптер. Это произойдет в нашем файле макета activity_main.xml . Добавьте эту строку в ваше изображение.
1
|
app:profileImage= "@{user.profileImage}" |
Привязка данных ImageView с заполнителем
Мы также можем принять несколько аргументов в нашей привязке адаптера. Например, может потребоваться загрузить изображение ошибки или заполнитель во время загрузки нашего изображения.
Мы передадим список атрибутов нашему привязывающему адаптеру для привязки. Нам нужно добавить код, чтобы проверить, произошла ли ошибка, а затем установить изображение ошибки. Вот как это выглядит:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
companion object { @JvmStatic @BindingAdapter (value = [ "profileImage" , "error" ], requireAll = false ) fun loadImage(view: ImageView, profileImage: String, error: Int) { Glide.with(view.context) .load(profileImage) .listener(object : RequestListener<Drawable> { override fun onLoadFailed( e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean ): Boolean { view.setImageResource(error) return true } override fun onResourceReady( resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean ): Boolean { view.setImageDrawable(resource) return true } }) .into(view) } } |
Обратите внимание, что мы установили для requireAll значение false. Это гарантирует, что этот адаптер используется, даже если один из атрибутов не задан в xml. Опустите это, если вы хотите, чтобы это вызывалось, только если предоставлены все атрибуты.
Теперь в нашем макете imageView мы можем предоставить ресурс для состояния ошибки.
1
|
app:error= "@{user.errorImage}" |
На этом мы заканчиваем наш урок по привязке данных с помощью glide . Надеюсь, вам понравилось.
Вывод
Привязка данных может использоваться со многими другими библиотеками, такими как Glide, Picasso, Fresco и т. Д. Все, что вам нужно сделать, это изменить логику адаптера привязки.
* Важно * : Присоединитесь к рабочему пространству AndroidVille SLACK для разработчиков мобильных устройств, где люди делятся своими знаниями обо всем , что связано с технологиями, особенно в разработке Android, RxJava, Kotlin, Flutter и разработке мобильных устройств в целом .
Нажмите на эту ссылку, чтобы присоединиться к рабочей области. Это абсолютно бесплатно!
связанные с
Смотреть оригинальную статью здесь: Использование DataBinding с Glide в Android Мнения, высказанные участниками Java Code Geeks, являются их собственными. |