Android:网络头像加载失败时,显示用户名+圆形背景合成的头像

这个其实很简单

在这里插入图片描述

先看图
在这里插入图片描述

重点

在图片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>

猜你喜欢

转载自blog.csdn.net/title71/article/details/113940450