2025年富文本框图片上传(富文本 图片)

富文本框图片上传(富文本 图片)p android 富文本 append 网络图片的加载方案 p 先占位 加载完之后重绘 view val builder SpannableStr val width DpUtil dp2px 35 val height DpUtil dp2px 30 val drawable

大家好,我是讯享网,很高兴认识大家。



 <p>android富文本append网络图片的加载方案</p> 

讯享网

先占位,加载完之后重绘view

讯享网val builder = SpannableStringBuilder() val width = DpUtil.dp2px(35) val height = DpUtil.dp2px(30) val drawable = URLImageSpanParser(context, view).getDrawable(bean.url_img, width, height) val imgSpan = CenterAlignImageSpan(drawable) val spannableString = SpannableString(“aaaa”) spannableString.setSpan(

imgSpan, 0, spannableString.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 

) builder.append(spannableString) builder.append(“ ”) textView.setText(builder)

用到的工具类


讯享网

讯享网class URLImageSpanParser(val context : Context?, val tv: TextView?) {

fun getDrawable(url:String?, width:Int, height:Int): Drawable { var urlDrawable &#61; UikitURLDrawable() if(width &#61;&#61; 0){ }else{ urlDrawable.setBounds(0, 0,width, height) } loadDrawableAsync(urlDrawable, url, width, height) return urlDrawable } private fun loadDrawableAsync(urlDrawable : UikitURLDrawable, url:String?, width: Int, height: Int){ ImgLoader.displayDrawable(context, url, object : DrawableCallback { override fun onLoadSuccess(drawable: Drawable) { drawable.setBounds(0, 0, width, height) urlDrawable.drawable &#61; drawable urlDrawable.invalidateSelf() tv?.postInvalidate() } override fun onLoadFailed() { } }) } 

}

class UikitURLDrawable:BitmapDrawable(){

讯享网var drawable:Drawable? &#61; null override fun draw(canvas: Canvas) { if(drawable !&#61; null){ drawable?.draw(canvas) } } 

}

public class CenterAlignImageSpan extends ImageSpan {

讯享网public CenterAlignImageSpan(Drawable drawable) { super(drawable); } public CenterAlignImageSpan(Bitmap b) { super(b); } &#64;Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { Drawable b &#61; getDrawable(); Paint.FontMetricsInt fm &#61; paint.getFontMetricsInt(); int transY &#61; (y &#43; fm.descent &#43; y &#43; fm.ascent) / 2 - b.getBounds().bottom / 2;//计算y方向的位移 canvas.save(); canvas.translate(x, transY);//绘制图片位移一段距离 b.draw(canvas); canvas.restore(); } 

}

public static void displayDrawable(Context context, String url, final DrawableCallback callback) {

讯享网if (context &#61;&#61; null || TextUtils.isEmpty(url)) { return; } try { Glide.with(context).asDrawable().load(new GlideUrl(url, sHeaders)).skipMemoryCache(SKIP_MEMORY_CACHE).into(new SimpleTarget&lt;Drawable&gt;() { &#64;Override public void onResourceReady(&#64;NonNull Drawable resource, &#64;Nullable Transition&lt;? super Drawable&gt; transition) { if (callback !&#61; null) { callback.onLoadSuccess(resource); } } &#64;Override public void onLoadFailed(&#64;Nullable Drawable errorDrawable) { if (callback !&#61; null) { callback.onLoadFailed(); } } }); } catch (Exception e) { e.printStackTrace(); } 

}

参考文章:Android 使用ImageSpan加载网络图片-CSDN博客


小讯
上一篇 2025-05-08 14:23
下一篇 2025-04-23 07:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/185792.html