TextView 中利用Glide 加载网络图片并显示

1、问题来源

TextView 是我们经常用到的控件,有时候我们也会用 TextView 来显示内容和图片,但是 TextView 只能接收一个 Drawable,但是我们实际的开发过程中更多的时候是一个图片 URL 地址,然后加载显示。但是我接下来要实现的一个效果如下:

看到效果图,我的第一反应自然是用 TextView 来实现。但在实现的过程中,发现由于图片的大小不一致,而 TextView又不能单独设置显示的图片的大小,因此 会导致图片的显示乱七八糟,这显然不是我们所期望的,于是就想着能不能有一种办法让它显示我们需要的大小,因为我的项目使用的网络加载框架是 Glide,因此此解决方案主要就是针对使用 Glide 来处理。 熟悉 Glide 的都知道 Glide 在进行图片的加载的时候,允许我们在拿到数据的时候做一些自己的预处理,在这里我们需要用到 SimpleTarget ,通过他的 onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) 来对需要显示的资源进行处理,具体代码已封装如下:

/**
     * 设置 TextView 的图片
     * @param context  当前上下文
     * @param actX 实际宽
     * @param actY 实际高
     * @param url  图片地址
     * @param isRight  是否右边显示
     * @param textView 要设置的 TextView 控件
     * @param text  文本内容
     */
    public static void setPicture(Context context,
                                  final int actX,
                                  final int actY,
                                  String url,
                                  final boolean isRight,
                                  final TextView textView,
                                  final String text) {
        final ConvertDrawable convertDrawable = new ConvertDrawable();
        Glide.with(context).load(url)
                .asBitmap()
                .placeholder(R.drawable.team_default_logo)
                .error(R.drawable.team_default_logo)
                .into(new SimpleTarget<Bitmap>(){
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        int x = resource.getWidth();
                        int y = resource.getHeight();
                        if (x > actX || y > actY) {
                            //进行等比例缩放程序
                            Matrix matrix = new Matrix();
                            matrix.postScale((float) (actX * 1.00 / x), (float) (actX * 1.00 / x));
                            //长和宽放大缩小的比例
                            resource = Bitmap.createBitmap(resource, 0, 0, x, y, matrix, true);
                        }
                        convertDrawable.bitmap = resource;
                        convertDrawable.setBounds(0, 0, resource.getWidth(), resource.getHeight());
                        if (isRight) {
                            textView.setCompoundDrawables(null,null, convertDrawable,null);
                        } else {
                            textView.setCompoundDrawables(convertDrawable,null,null,null);
                        }
                        textView.invalidate();
                    }
                });
        textView.setText(text);
    }

复制代码

下面是将将 Bitmap 转换为 Drawable 图片的实现类。

    private static class ConvertDrawable extends BitmapDrawable {
        protected Bitmap bitmap;
        @Override
        public void draw(Canvas canvas) {
            if (bitmap != null) {
                canvas.drawBitmap(bitmap, 0, 0, getPaint());
            }
        }
    }
复制代码

好了,有了上面的处理,就能很轻松的实现图中所示的效果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值