Android的图文混合实现之TextView+html加载图片,基于android的app的设计与开发

//URLImageGetter:实现Html类中一个接口ImageGetter,用于检索获取HTML中的标签,给img标签获取图片内容

public class URLImageGetter implements ImageGetter {

Context c;

TextView tv_image;

private List targets = new ArrayList<>();

public URLImageGetter(TextView t, Context c) {

this.tv_image = t;

this.c = c;

tv_image.setTag(targets);

}

@Override

public Drawable getDrawable(final String source) {

// 获取图片的url和标签

final URLDrawable urlDrawable = new URLDrawable();

final Target target = new Target() {

@Override

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {

Drawable drawable = new BitmapDrawable(bitmap);

drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());

urlDrawable.setDrawable(drawable);

urlDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());

tv_image.invalidate();

tv_image.setText(tv_image.getText());

}

@Override

public void onBitmapFailed(Drawable errorDrawable) {

//加载失败

errorDrawable.setBounds(0, 0, errorDrawable.getIntrinsicWidth(), errorDrawable.getIntrinsicHeight());

urlDrawable.setBounds(0, 0, errorDrawable.getIntrinsicWidth(), errorDrawable.getIntrinsicHeight());

urlDrawable.setDrawable(errorDrawable);

tv_image.invalidate();

}

@Override

public void onPrepareLoad(Drawable placeHolderDrawable) {

//准备加载

placeHolderDrawable.setBounds(0, 0, placeHolderDrawable.getIntrinsicWidth(), placeHolderDrawable.getIntrinsicHeight());

urlDrawable.setBounds(0, 0, placeHolderDrawable.getIntrinsicWidth(), placeHolderDrawable.getIntrinsicHeight());

urlDrawable.setDrawable(placeHolderDrawable);

tv_image.invalidate();

}

};

targets.add(target);

ImageLoad.loadPlaceholder(c, source, target);

return urlDrawable;

}

(2)返回异步回调的drawable

怎么把异步回调的drawable返回,因为图片是异步加载的,所以我们要先建立一个BitmapDrawable,当没有异步加载的时候用来getDrawable的返回。可以包装一个drawable,继承于html.drawable,当返回正确drawable的时候填充进去,刷新一下就可以显示内容

URLDrawable

public class URLDrawable extends BitmapDrawable {

private Drawable drawable;

@Override

public void draw(Canvas canvas) {

if (drawable != null) {

drawable.draw(canvas);

}

}

public void setDrawable(Drawable drawable) {

this.drawable = drawable;

}

加载出来效果:

3

4

5

(3)图片的点击放大

接着在编写一个类继承于 TagHandler,重写

handleTag()方法。支持img标签的点击处理,能够监听到点击事件。

URLTagHandler:

//标签解析器:处理未知标签,

public class URLTagHandler implements TagHandler {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值