SpannableString与SpannableStringBuilder


/*
http://blog.youkuaiyun.com/harvic880925/article/details/38984705
*参数说明:

object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE	:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE	:前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE	:前后都包括。
*
*
* span:
*   //再构造一个改变字体颜色(ForegroundColorSpan)
         span = new ForegroundColorSpan(Color.BLUE);
        //改变字背景色(BackgroundColorSpan)
        BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
        //改变字大小(AbsoluteSizeSpan)
        AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);
        //粗体、斜体(StyleSpan)
        StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
        //删除线(StrikethroughSpan)
        StrikethroughSpan span = new StrikethroughSpan();
        //下划线(UnderlineSpan)
        UnderlineSpan span = new UnderlineSpan();
*
* */
public class MainActivity extends AppCompatActivity {
    private EditText editText;
    private TextView text1,text2,text3,text4;
    private SpannableString spanString;
    private ForegroundColorSpan span_ForegroundColorSpan;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText)findViewById(R.id.edit);
        text1 = (TextView) findViewById(R.id.text1);
        text2 = (TextView) findViewById(R.id.text2);
        text3 = (TextView) findViewById(R.id.text3);
        text4 = (TextView) findViewById(R.id.text4);

        //改变字体颜色
        //先构造SpannableString
         spanString = new SpannableString("地地道道的欢迎光临Harvic的博客");



        //1.再构造一个改变字体颜色(ForegroundColorSpan)
         span_ForegroundColorSpan = new ForegroundColorSpan(Color.BLUE);
        //2.改变字背景色(BackgroundColorSpan)
        BackgroundColorSpan span_BackgroundColor = new BackgroundColorSpan(Color.YELLOW);
        //3.改变字大小(AbsoluteSizeSpan)
        AbsoluteSizeSpan span_AbsoluteSize = new AbsoluteSizeSpan(16);

        //4.粗体、斜体(StyleSpan)
        StyleSpan span_Style = new StyleSpan(Typeface.BOLD_ITALIC);
        //5.删除线(StrikethroughSpan)
        StrikethroughSpan span_Strikethrough = new StrikethroughSpan();
        //6.下划线(UnderlineSpan)
        UnderlineSpan span_Underline = new UnderlineSpan();

        //7.图片置换(ImageSpan)
        Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        //也可以这样    ImageSpan imageSpan = new ImageSpan(this, R.mipmap.ic_launcher)


        spanString.setSpan(span_ForegroundColorSpan, 4, 7, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        spanString.setSpan(span_BackgroundColor, 4, 7, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        spanString.setSpan(span_AbsoluteSize, 7, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

        spanString.setSpan(span, 1, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //SPAN_EXCLUSIVE_INCLUSIVE编辑框编辑的时候,后面的数字会跟着改变
//        //设置给EditText显示出来
        editText.setText(spanString);

        init1();
        setColor();
    }


    public void init1 () {
        SpannableStringBuilder spannableString = new SpannableStringBuilder();
        spannableString.append("暗影IV已经开始暴走了");

        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "请不要点我", Toast.LENGTH_SHORT).show();
            }
        };
        spannableString.setSpan(clickableSpan, 5, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        text1.setText(spannableString);
        text1.setMovementMethod(LinkMovementMethod.getInstance());

    }

    private void setColor () {

        Spanned replyText = Html.fromHtml("交换机"+"<font color=" + getResources().getColor(R.color.colorAccent) + ">"+10548+"</font>");
      String nae  =   getString(R.string.app_name);
        text3.setText(Html.fromHtml(getString(R.string.draw_money,5555.368749,"222")));
        text2.setText(replyText);
    }
}


本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值