class NetworkImageGetter : Html.ImageGetter { private var mTextView:TextView constructor(textView:TextView){ mTextView = textView } override fun getDrawable(source: String): Drawable? { val drawable = CenterDrawable() Glide.with(BaseActivity.activity).asBitmap() .diskCacheStrategy(DiskCacheStrategy.DATA) .load(source) .into(object : SimpleTarget<Bitmap>(600, 600 ) { override fun onResourceReady( resource: Bitmap, transition: Transition<in Bitmap>? ) { val width: Int = mTextView.width if (resource.width > width) { val scale = width / resource.width val afterWidth = (resource.width * scale).toInt() val afterHeight = (resource.height * scale).toInt() drawable.setBounds(0, 0, afterWidth, afterHeight) drawable.bitmap = resizeBitmap( resource, afterWidth, afterHeight ) } else { drawable.setBounds(0, 0, resource.width, resource.height) drawable.bitmap = resource } mTextView.invalidate() mTextView.text = mTextView.text } } ) return drawable } private fun resizeBitmap(resource: Bitmap, afterWidth: Int, afterHeight: Int): Bitmap? { val width = resource.width val height = resource.height // 计算缩放比例 val scaleWidth = afterWidth.toFloat() / width val scaleHeight = afterHeight.toFloat() / height // 取得想要缩放的matrix参数 val matrix = Matrix() matrix.postScale(scaleWidth, scaleHeight) // 得到新的图片 return Bitmap.createBitmap(resource, 0, 0, width, height, matrix, true) } }
public class CenterDrawable extends BitmapDrawable { private Bitmap bitmap; @Override public void draw(Canvas canvas) { super.draw(canvas); if (bitmap != null) { //左右边距16 int i = canvas.getWidth() - bitmap.getWidth() - AppUtils.dp2px(16*2F); canvas.drawBitmap(bitmap, i / 2, 0, getPaint()); } } public CenterDrawable setBitmap(Bitmap bitmap) { this.bitmap = bitmap; return this; } }
使用:
tv_html.text = Html.fromHtml(it.content, NetworkImageGetter(tv_html), null)