在上一节Android——SpannableString实现顶部对齐(上标,下标)中我们已经了解,SuperscriptSpanSubscriptSpan可以实现上标和下标效果,但是不可以改变大小,且显示位置固定。
今天我们要实现的效果如下:
在这里插入图片描述
TwoScriptTextSpan .java

public class TwoScriptTextSpan extends ReplacementSpan {    private int fontSize = -1;    private boolean isSp;    private int position;    public @interface ScriptPosition {        int LEFT_TOP = 1;        int LEFT_BOTTOM = 2;        int RIGHT_TOP = 3;        int RIGHT_BOTTOM = 4;    }    public TwoScriptTextSpan(int fontSize, boolean isSp) {        this.fontSize = fontSize;        this.isSp = isSp;    }    public TwoScriptTextSpan(int fontSize, boolean isSp, int position) {        this.fontSize = fontSize;        this.isSp = isSp;        this.position = position;    }    @Override    public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) {        Paint newPaint = getCustomTextPaint(paint);        return (int) newPaint.measureText(text, start, end);    }    @Override    public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int            bottom, @NonNull Paint paint) {        Paint newPaint = getCustomTextPaint(paint);        text = text.subSequence(start, end);        String[] parts = text.toString().split(",");        float width1 = newPaint.measureText(parts[0]);        float width2 = newPaint.measureText(parts[1]);        float maxWidth = Math.max(width1, width2);        float minWidth = Math.min(width1, width2);        canvas.drawText(parts[0], x + minWidth + (maxWidth - width1), y - (bottom - top) / 3f, newPaint);        canvas.drawText(parts[1], x + minWidth + (maxWidth - width2), y, newPaint);    }    private TextPaint getCustomTextPaint(Paint srcPaint) {        TextPaint textPaint = new TextPaint(srcPaint);        if (fontSize != -1) {            textPaint.setTextSize(isSp ? fontSize * textPaint.density : fontSize);        }        return textPaint;    }}

MainActivity.java

String format = "9,4Be -> 2000,127Jo";SpannableString ss = new SpannableString(format);TwoScriptTextSpan leftTopSpan = new TwoScriptTextSpan(25, true,1);ss.setSpan(leftTopSpan, 0, 3, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);TwoScriptTextSpan rightTopSpan = new TwoScriptTextSpan(25, true,2);ss.setSpan(rightTopSpan, 9, 17, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);tvImageSpan.setText(ss);

更多相关文章

  1. android开发之给LinearLayout增加点击效果
  2. Android 导航条效果实现(四) ViewPager+自定义导航条
  3. Android 动画效果 --Animation 动画专题研究
  4. Android的CheckBox控件的点击效果布局文件
  5. android圆角、边框、画线效果、RatingBar背景
  6. Android ListView 事件监听 || 关于ListView选中时显示的效果。
  7. Android之glide加载图片圆角效果
  8. Android 中 动画效果实现
  9. Android 使用ViewDragHelper实现向slidingMenu侧滑菜单的效果

随机推荐

  1. android 创建系统变量
  2. Android软Watchdog源码分析
  3. Android Framework源码下载及编译
  4. 2019年 Android 开源框架 排行榜 TOP 60
  5. TQ210搭载Android 4.0.3测试Google Maps
  6. Android入门第十六篇之Style与Theme
  7. Android 学习纲要
  8. 谷歌I/O大会宣布开放注册发布预览版Andro
  9. android如何实现开机自动启动Service或ap
  10. Android Studio如何删除module