刚开始以为是WebView,后来发现被坑了。不断在https://impress.pw寻找,找到http://stackoverflow.com/questions/25194549/using-picasso-with-image-getter
问题解决,贴一下源码:
public class PicassoImageGetter implements Html.ImageGetter {
private TextView textView = null;
public PicassoImageGetter(TextView target) {
textView = target;
}
@Override
public Drawable getDrawable(final String source) {
BitmapDrawablePlaceHolder drawable = new BitmapDrawablePlaceHolder();
Picasso.with(ShopApp.GLOBAL_CONTEXT)
.load(source)
.placeholder(R.drawable.item_defaut_img)
// .error(R.drawable.)
.into(drawable);
return drawable;
}
class BitmapDrawablePlaceHolder extends BitmapDrawable implements Target {
protected Drawable drawable;
@Override
public void draw(final Canvas canvas) {
if (drawable != null) {
drawable.draw(canvas);
}
}
public void setDrawable(Drawable drawable) {
this.drawable = drawable;
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
if (textView != null) {
textView.setText(textView.getText());
}
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
setDrawable(new BitmapDrawable(ShopApp.GLOBAL_CONTEXT.getResources(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
setDrawable(errorDrawable);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
}
调用非常简单:
contentView.setText(Html.fromHtml(dto.content, new PicassoImageGetter(contentView), null));