这个其实很简单
先看图
重点
在图片ImaveView上方显示Textview应该不难
<LinearLayout
android:orientation="vertical"
android:layout_width="60dp"
android:layout_height="60dp">
<ImageView
android:padding="7dp"
android:id="@+id/iv_avatar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/default_avatar_background"
/>
<TextView
android:visibility="invisible"
android:id="@+id/tv_default_avatar"
android:text="京怀"
android:textColor="@color/white"
android:textSize="14dp"
android:gravity="center"
android:layout_marginTop="-60dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
android:visibility="invisible"
这个要注意一下,用gone在加载listview的时候会出现蜜汁bug
然后就是图片加载监听
加载失败了,就显示TextView,成功就不显示
tv_default_avatar 是textview控件
avatar 是imageview控件
//设置背景圆形⭕️
RequestOptions options = RequestOptions.bitmapTransform(new CropCircleTransformation());
Glide.with(context)
.load(imageUrl)
//.placeholder(R.drawable.ic_default_image)
.error(R.drawable.default_avatar_background)
.apply(options)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//加载失败,显示文字头像
tv_default_avatar.setVisibility(View.VISIBLE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
//加载成功,不显示
tv_default_avatar.setVisibility(View.INVISIBLE);
return false;
}
})
.into(avatar);
补充
default_avatar_background.xml
文件
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle">
<solid android:color="@color/color_theme"/>
<corners android:radius="40dp"/>
<stroke
android:width="0.5dp"
android:color="@color/color_theme"/>
</shape>
</item>
</layer-list>