android html图片点击事件,TextView加载html图片并点击放大

本文详细介绍了如何在Android中通过TextView加载包含图片的HTML内容,并实现图片点击后放大显示。通过自定义URLImageGetter和TagHandler,利用Picasso加载图片,同时添加点击事件,最终实现在TextView中点击图片弹出Popwindow进行图片放大查看。
摘要由CSDN通过智能技术生成

实际上android中的textview是提供了加载html代码的功能的,使用的方法也很简单

textView.setText(Html.fromHtml("html",null,null));

这样调用应对简单的html文本是没有问题的,但是遇到包含图片的html代码就会导致图片加载失败,显示一个小方框

d357d31389ae

图片加载失败

类似上面这样,虽然可以加载html,但是会导致图片加载失败。

那么,问题来了,怎么才能加载图片呢?不要心急,咱们一一道来。

加载图片

仔细看上面的代码可以发现,最后两个参数传入的是null,本来应该传入什么呢?查看一下源码发现第二个参数传入的是 Html.ImageGetter ,这个接口的作用就是当解析到标签时就会回调getDrawable()方法,并返回一个Drawable对象;那就简单了,写一个类实现这个接口吧。

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) {

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;

}

}

构造方法就不用讲了,着重看一下getDrawable(final String source) 这个方法。

提供一个img路径,返回一个drawable对象,这不就是图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值