SpannableString应用示例

public class SpannableStringActivity extends Activity {

@BindView(R.id.spannable_string)
TextView spannableString;
@BindView(R.id.jump_string)
TextView jumpString;

SpannableString jumpStr=new SpannableString("跳动的文字跳动的文字跳动的文字跳动的文字");
SpannableString string;
private RelativeSizeSpan jumpSizeSpanMax =new RelativeSizeSpan(1.5f);
private RelativeSizeSpan jumpSizeSpanMiddleL =new RelativeSizeSpan(1.2f);
private RelativeSizeSpan jumpSizeSpanMiddleR =new RelativeSizeSpan(1.2f);
private Context mContext;

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spannable_string);
ButterKnife.bind(this);
mContext=this;
string = new SpannableString("文字颜色背景色表情大小变化删除线下标上标粗体斜体下划线点击事件超链接模糊效果浮雕效果光栅效果动图");
//文本颜色
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(0xFFff00ff);
string.setSpan(foregroundColorSpan, 0, 4, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//文本背景色
BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(0xFFff00ff);
string.setSpan(backgroundColorSpan, 4, 7, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置表情 设置静态图片 不支持gif
Drawable drawable=getDrawable(R.mipmap.ic_launcher);
drawable.setBounds(0,0,150,150);
ImageSpan imageSpan=new ImageSpan(drawable);
string.setSpan(imageSpan,7,9,Spanned.SPAN_INCLUSIVE_INCLUSIVE);


//设置文字大小变化
RelativeSizeSpan sizeSpan0 = new RelativeSizeSpan(1.2f);
RelativeSizeSpan sizeSpan1 = new RelativeSizeSpan(2.3f);
RelativeSizeSpan sizeSpan2 = new RelativeSizeSpan(0.6f);
RelativeSizeSpan sizeSpan3 = new RelativeSizeSpan(1.9f);
string.setSpan(sizeSpan0, 9, 10, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
string.setSpan(sizeSpan1, 10, 11, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
string.setSpan(sizeSpan2, 11, 12, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
string.setSpan(sizeSpan3, 12, 13, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置删除线
StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
string.setSpan(strikethroughSpan, 13, 16, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置下标
SubscriptSpan subscriptSpan = new SubscriptSpan();
string.setSpan(subscriptSpan, 16, 18, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置上标
SuperscriptSpan superscriptSpan = new SuperscriptSpan();
string.setSpan(superscriptSpan, 18, 20, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置粗体/斜体
StyleSpan styleSpanB = new StyleSpan(Typeface.BOLD);
StyleSpan styleSpanI = new StyleSpan(Typeface.ITALIC);
StyleSpan styleSpanBI = new StyleSpan(Typeface.BOLD_ITALIC);
string.setSpan(styleSpanB, 20, 21, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
string.setSpan(styleSpanI, 21, 23, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
string.setSpan(styleSpanBI, 23, 24, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置下划线
UnderlineSpan underlineSpan = new UnderlineSpan();
string.setSpan(underlineSpan, 24, 27, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
//设置点击事件 自动添加下划线
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(SpannableStringActivity.this, "点击事件", Toast.LENGTH_SHORT).show();
}
};
string.setSpan(clickableSpan, 27, 31, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

//超连接 自动添加下划线
URLSpan urlSpan = new URLSpan("http://m.baidu.com");
string.setSpan(urlSpan, 31, 34, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

spannableString.setMovementMethod(LinkMovementMethod.getInstance());//如果有点击事件,该方法必须
// spannableString.setHighlightColor(0xffff0000);//设置可点击文本点击时的背景颜色

//设置模糊效果
MaskFilter maskFilter1 = new BlurMaskFilter(2.0f, BlurMaskFilter.Blur.INNER);
MaskFilterSpan maskFilterSpan1 = new MaskFilterSpan(maskFilter1);
string.setSpan(maskFilterSpan1, 34, 38, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

//设置浮雕效果
MaskFilter maskFilter2 = new BlurMaskFilter(3.0f, BlurMaskFilter.Blur.OUTER);
MaskFilterSpan maskFilterSpan2 = new MaskFilterSpan(maskFilter2);
string.setSpan(maskFilterSpan2, 38, 42, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

spannableString.setText(string);

handler.sendEmptyMessage(0);
handler.sendEmptyMessage(1);
}

Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
int i= (int) (System.currentTimeMillis()/150%jumpStr.length());
jumpStr.setSpan(jumpSizeSpanMiddleL,i,i+1,Spanned.SPAN_INCLUSIVE_INCLUSIVE);
if(i<jumpStr.length()-2) {
jumpStr.setSpan(jumpSizeSpanMax, i + 1, i + 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
jumpStr.setSpan(jumpSizeSpanMiddleR, i+2, i+3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}else if(i==jumpStr.length()-2){
jumpStr.setSpan(jumpSizeSpanMax, i+1, i+2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
jumpStr.setSpan(jumpSizeSpanMiddleR, 0, 1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}else{
jumpStr.setSpan(jumpSizeSpanMax, 0, 1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
jumpStr.setSpan(jumpSizeSpanMiddleR, 1, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
jumpString.setText(jumpStr);
sendEmptyMessageDelayed(0,150);
break;

case 1:
int k= (int)System.currentTimeMillis()/150%2;
Drawable drawable;
if(k==0) {
drawable = mContext.getResources().getDrawable(R.mipmap.mao0);
}else {
drawable = mContext.getResources().getDrawable(R.mipmap.mao1);
}
drawable.setBounds(0, 0, 200, 200);
ImageSpan imageSpan=new ImageSpan(drawable);
string.setSpan(imageSpan,7,9,Spanned.SPAN_INCLUSIVE_INCLUSIVE);
spannableString.setText(string);
sendEmptyMessageDelayed(1,150);
break;
}
}
};
}
效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值