textview加载html glide,TextView 中利用Glide 加载网络图片并显示

1、问题来源

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

看到效果图,我的第一反应自然是用 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(){

@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());

}

}

}

复制代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值