databinding 加载图片需要使用注解
下面 说下使用方法
还是先从布局开始把
<?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">
<data>
<variable
name="item"
type="com.hxm.Item"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.title}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.label}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.content}"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
app:imageUrl="@{item.image}" />
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@{item.photo}" />
</LinearLayout>
</layout>
里面有文字有图片
然后创建一个Item
public class Item {
private String title;
private String label;
private String content;
private String image;
private int photo;
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Item(String title, String label , String content, String image,int photo) {
this.title = title;
this.label = label;
this.content = content;
this.image = image;
this.photo = photo;
}
public int getPhoto() {
return photo;
}
public void setPhoto(int photo) {
this.photo = photo;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
代码中三个步骤
public class DataActivity extends AppCompatActivity{
DataActivityLayoutBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1.获取<data />标签对象
binding = DataBindingUtil.setContentView(this,R.layout.data_activity_layout);
// 2.创建Item对象
Item item = new Item("父亲的背景","散文","我与父亲不相见已二年余了,我最不能忘记的是他的背影", "https://img.52z.com/upload/news/image/20180621/20180621055651_47663.jpg",R.mipmap.ele);
// 3.绑定到mUser到布局对象中
binding.setItem(item);
里面有一个网址和一个本地图片, 如果这样运行是不会显示图片的,还要有BindingAdapter 注解才行
具体代码如下
public class ImageViewAdapter {
@BindingAdapter("android:src")
public static void setSrc(ImageView view, Bitmap bitmap) {
view.setImageBitmap(bitmap);
}
@BindingAdapter("android:src")
public static void setSrc(ImageView view, int resId) {
view.setImageResource(resId);
}
@BindingAdapter("imageUrl")
public static void setSrc(ImageView imageView, String url) {
Glide.with(imageView.getContext()).load(url)
.placeholder(R.mipmap.ic_launcher)
.into(imageView);
}
@BindingAdapter({"app:imageUrl", "app:placeHolder", "app:error"})
public static void loadImage(ImageView imageView, String url, Drawable holderDrawable, Drawable errorDrawable) {
Glide.with(imageView.getContext())
.load(url)
.placeholder(holderDrawable)
.error(errorDrawable)
.into(imageView);
}
}
如果是加载本图片 @BindingAdapter("android:src") 网络图片是@BindingAdapter("imageUrl")
网络图片不要忘记添加添加网络权限
然后看下效果图