Android自定义Span示例
来源:互联网 发布:读诗书明德知礼下联 编辑:程序博客网 时间:2024/05/29 18:04
在实际开发中,有一些精细的UI需求可能会比整体逻辑要花费更多时间。但是产品整体视觉效果的提升,也往往就在这些微小的差异中。例如listView中的复杂item,在item的标题或者边角处可能会需要加各种标签或icon。实现它们有多种方式,比如imageView、iconfont矢量图、span,其中span可以方便的进行图文混排,并设置文字的样式,下面我就来介绍一种自定义imageSpan的实现。
public class FixedSizeImageSpan extends ImageSpan { private int textColor; private int width; private int height; public FixedSizeImageSpan(Context context, int resourceId, int textColor, int width, int height, boolean isDip) { super(context, resourceId); if (isDip) { width = DimenHelper.dip2px(context, width); height = DimenHelper.dip2px(context, height); } this.textColor = textColor; this.width = width; this.height = height; } @Override public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) { return width; } private static final float OVERSHOOT_RATIO = 0.125f; private static final float bgOffsetY = -1; @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { Drawable drawable = getDrawable(); canvas.save(); drawable.setBounds(0, 0, width, height); canvas.translate(Math.round(x), Math.round(y - drawable.getBounds().bottom + height * OVERSHOOT_RATIO) + bgOffsetY); drawable.draw(canvas); canvas.restore(); canvas.save(); paint.setColor(textColor); float textWidth = paint.measureText(text, start, end); canvas.translate((width - textWidth) / 2, -(height - paint.getTextSize()) / 2); canvas.drawText(text, start, end, x, y, paint); canvas.restore(); }}
TextView textView = (TextView) findViewById(R.id.text_view); FixedSizeImageSpan span = new FixedSizeImageSpan(this, R.mipmap.ic_launcher, Color.BLACK, 60, 60, true); SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); stringBuilder.append("hello world") .setSpan(span, 0, 5, SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(stringBuilder);
调用时,只要把text和spand都塞到SpannableStringBuilder中就行了,SpannableStringBuilder实现了CharSequence,可以直接传给textView。
具体代码见:https://github.com/wlkdb/example_span
阅读全文
0 0
- Android自定义Span示例
- android中自定义span对象的动作
- Android自定义圆角Span背景
- Android 自定义菜单示例
- android 自定义 Content Provider示例
- android 自定义 Content Provider示例
- android 自定义 Content Provider示例
- Android 自定义ProgressDialog示例实现
- android自定义倒计时控件示例
- [Android]自定义控件入门示例
- Android自定义控件扩展示例
- android span相关
- Android中Span研究
- Android Span 架构介绍
- Android Span 进阶
- Android Span 的使用
- Android Span应用
- Android Span 介绍
- 【版本控制】eclipse和svn的搭配使用(检出,分享,冲突的处理)
- 剑指offer——二叉树的下一个结点(好题)
- 人脸识别算法,人证合一的应用
- AsyncTask源码深入分析和巧记线程池
- Android系统架构-AndroidStudio文件架构-1
- Android自定义Span示例
- c++实训单元五-自定义数据类型
- Redis主从复制
- 优化Trunk
- 【Lua】Lua之面向对象
- Oracle PL/SQL开发基础(第二十二弹:类型转换函数)
- HDOJ 2191 珍惜现在,感恩生活(多重背包)
- 配置python环境变量
- Idea 调试功能使用指南