android 设置图片资源,如何使用DataBinding将Image资源设置为ImageView
像这样设置图像,
答案: https : //stackoverflow.com/a/36941125/703225
定义:
@BindingAdapter({"android:src"}) public static void setImageViewResource(ImageView imageView, int resource) { imageView.setImageResource(resource); }
使用:
我试过这个,它适用于我(buildToolsVersion:24.0.1):
只是使用app:imageResource来取代android:src , android:src="@{item.avatarResId}"不起作用,否则为它定义一个自定义的@BindAdapter("android:src") 。
但是使用app:imageResource不需要另外定义@BindAdapter ,因为ImageView有一个名为setImageResource()的方法,当你使用app:imageResource ,它会自动调用setImageResource() 。
阅读这篇文章: 使用Data Binding和Picasso加载图像
有两种方法可以做到这一点:
使用@BindingAdapter
ObservableField &定制毕加索目标
在Android开发人员参考数据绑定指南 ,你会发现只有第一个。
请阅读这两篇文章。
更多信息:
希望它有帮助。
更多信息请点击此处详细信息 使用数据绑定和毕加索加载图像
public class ProfileViewModel { // The URL will usually come from a model (ie Profile) static final String IMAGE_URL = "http://img.androidcookie.com/android/60677654.jpg"; public ObservableField profileImage; private BindableFieldTarget bindableFieldTarget; public ProfileViewModel(Context context) { profileImage = new ObservableField<>(); // Picasso keeps a weak reference to the target so it needs to be stored in a field bindableFieldTarget = new BindableFieldTarget(profileImage, context.getResources()); Picasso.with(context) .load(IMAGE_URL) .placeholder(R.drawable.placeholder) .into(bindableFieldTarget); } public class BindableFieldTarget implements Target { private ObservableField observableField; private Resources resources; public BindableFieldTarget(ObservableField observableField, Resources resources) { this.observableField = observableField; this.resources = resources; } @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { observableField.set(new BitmapDrawable(resources, bitmap)); } @Override public void onBitmapFailed(Drawable errorDrawable) { observableField.set(errorDrawable); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { observableField.set(placeHolderDrawable); } } }
如果你想传递一个参数到像@ IdRes你可以使用的方法
@BindingAdapter("load_image") public static void loadImage(ImageView view, @IdRes int imageId) { //Logic }
也许你在这里读,记住旧的系统不能处理它
然后
@BindingAdapter({"app:svg"}) public static void setImageViewResource(ImageView imageView, Drawable resource) { imageView.setBackgroundDrawable(resource); }
问题在于所有具有同名设置器的属性。 例如android:x不会工作,如果setX()方法不在那里,如果我们在ImageView上有setSrc()方法,那么你的代码在没有自定义绑定适配器
如果您的数据模型包含图像的资源ID,则可以通过编程方式执行此操作。
例:
只要将下面一行添加到你的imageView中(当我添加它时,我无法格式化代码):
android:src="@{ContextCompat.getDrawable(context,roomInfoItem.resId)}"
其中resId包含R.drawable.your_image_name
public class ProfileViewModel(context: Context, imageUrl : String) { var IMAGE_URL: String? = null var profileImage: ObservableField? = null private var bindableFieldTarget: BindableFieldTarget? = null init { this.IMAGE_URL = imageUrl profileImage = ObservableField() // Picasso keeps a weak reference to the target so it needs to be stored in a field bindableFieldTarget = BindableFieldTarget(profileImage!!, context.getResources()) Picasso.with(context) .load(IMAGE_URL) .placeholder(R.drawable.user) .into(bindableFieldTarget); } class BindableFieldTarget(private val observableField: ObservableField, private val resources: Resources) : Target { override fun onBitmapLoaded(bitmap: Bitmap, from: Picasso.LoadedFrom) { observableField.set(BitmapDrawable(resources, bitmap)) } override fun onBitmapFailed(errorDrawable: Drawable) { observableField.set(errorDrawable) } override fun onPrepareLoad(placeHolderDrawable: Drawable) { observableField.set(placeHolderDrawable) } } }
我们需要将这个imageUrl设置到适配器类中的这个目标,或者你正在使用的任何东西。
val profileViewModel = ProfileViewModel(MainApplication.applicationContext(), items[position].user.profileImageUrl) holder.view.vm.imageUrl.set(profileViewModel.profileImage!!.get())
android 设置图片资源,如何使用DataBinding将Image资源设置为ImageView相关推荐
- Android 通过图片资源名字获得图片资源设置在ImageView上
Android 通过图片资源名字获得图片资源设置在ImageView上 操作 案例 操作 如何通过图片资源名得到图片资源? // 拿到图片名字 String iconName = "weat ...
- Android屏幕图片资源大小
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android中图片资源格式的是,Android 项目图片资源文件的使用,适配以及优化
Android 项目图片资源文件的使用,适配以及优化 Aandroid,适配,bitmap,bitmapfactory,优化, 2016-05-13 16:52:50 Android 项目中常见的图片 ...
- Android开发提升效率之DataBinding——双向绑定
DataBingding Android开发提升效率之DataBinding--基本使用 Android开发提升效率之DataBinding--进阶开发 Android开发提升效率之DataBindi ...
- android的xml置底_Android布局之xml设置
android:id 为控件指定相应的IDandroid:text 指定控件的文本,置尽量使用strings.xmlandroid:grivity 指定控件的基本位置 ,比如举重,居右,android ...
- Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度...
Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子.加快开发速度 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 在使用 A ...
- android imap开发,企业邮箱在Android(安卓)系统手机上POP3/IMAP协议如何设置
企业邮箱在Android(安卓)系统手机上POP3/IMAP协议如何设置 我们已经推出了自己研制的手机客户端,具备高兼容性,不需需配置,输入企业邮箱地址和密码直接登录使用.了解详情> 直接扫码下 ...
- android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程
Android N去除了情景模式,取而代之的是勿扰模式.勿扰模式的入口有两处,下拉栏和设置声音里面.下面我们就从设置声音入口,看看勿扰模式的设置流程. 首先,勿扰模式的首页有三种选项,分别是仅允许优先 ...
- kodi android 键盘,KODI按键映射,看IPTV按键设置
KODI按键映射,看IPTV按键设置 2020-04-09 18:10:10 16点赞 76收藏 7评论 KODI播放器功能丰富,其中自定义按键功能也是强大,可以让用户修改各个场景下各个按键的功能,网 ...
最新文章
- oracle两表同步java代码,利用DBLink+JOB实现两个Oracle数据库之间的数据同步
- [OS复习]进程互斥与同步2
- python处理ini文件_python对ini配置文件处理
- 一个REST风格的URI设计方案[Blog Web Services]
- win10新版本被移除的旧特性
- VS2015 设置结构成员对齐
- 为什么我不建议你用去 “ ! = null “ 做判空?
- Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
- html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...
- EOS价格震荡起伏,EOS生态数据不断上行
- 信息系统分析与设计 第十章 系统总体设计
- 关于密钥和密钥管理的常见问题及解答
- js 周期性定时器
- python实现图像识别水果_使用Python实现基于图像识别的iOS自动化测试
- Creo服务器管理器配置文件,Creo界面设置常用配置文件参数汇总 | 坐倚北风
- sap fi清账函数POSTING_INTERFACE*的使用
- Oracle数据库客户端安装与配置
- 硬件编解码(一)硬件编解码介绍
- 10 快速生成树协议RSTP配置
- CLR via C#-基元类型、引用类型和值类型