TextSwitcher文本选择器实现走马灯效果,及Spanny,SpannableStringBuilder和SpannalbeString的应用
来源:互联网 发布:vb for 循环语句 编辑:程序博客网 时间:2024/06/07 07:40
还是老规矩:看图说话
看到这个:一般的做法是写二个TextView去实现动画效果,让其不断的进行循环滚动即可
但是现在的做法就是:只通过TextSwitcher去实现即可
首先普及一下:TextSwicher的基本知识如下:
TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式、事件方面的设置。Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能:1、BackgroundColorSpan 背景色 2、ClickableSpan 文本可点击,有点击事件3、ForegroundColorSpan 文本颜色(前景色)4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)5、MetricAffectingSpan 父类,一般不用6、RasterizerSpan 光栅效果7、StrikethroughSpan 删除线(中划线)8、SuggestionSpan 相当于占位符9、UnderlineSpan 下划线10、AbsoluteSizeSpan 绝对大小(文本字体)11、DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。12、ImageSpan 图片13、RelativeSizeSpan 相对大小(文本字体)14、ReplacementSpan 父类,一般不用15、ScaleXSpan 基于x轴缩放16、StyleSpan 字体样式:粗体、斜体等17、SubscriptSpan 下标(数学公式会用到)18、SuperscriptSpan 上标(数学公式会用到)19、TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)20、TypefaceSpan 文本字体21、URLSpan 文本超链接以及其方法的使用:setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本,或者是一张图片等等,start表示需要设置格式的子字符串的起始下标,同理end表示终了下标,flags属性就有意思了,共有四种属性:Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和终了下标Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括终了下标
且看代码如下:
第一步:布局视图:
<!--文本切换器--> <TextSwitcher android:layout_centerInParent="true" android:inAnimation="@anim/slide_in_bottom" android:outAnimation="@anim/slide_out_top" android:id="@+id/text_switcher" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <!--进出动画切换 android:inAnimation="@anim/slide_in_bottom" android:outAnimation="@anim/slide_out_top"-->
第二步:进和出的动画效果
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="100.0%p" android:toYDelta="0.0"/></set><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="0.0" android:toYDelta="-100.0%p"/></set>
第三步:具体代码编写
private TextSwitcher mTextSwitcher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextSwitcher = (TextSwitcher) findViewById(R.id.text_switcher); mTextSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { TextView textView = new TextView(MainActivity.this); return textView; } }); //显示下一个文本内容 nextInvestInfo(); } //控制开关 private boolean flag = true; private void nextInvestInfo() { String totalInvestProject; String totalInvestValue; String investContent; if(flag) { totalInvestProject = "累计投资人数"; totalInvestValue = "9,408,567"; investContent = totalInvestProject +"\n"+totalInvestValue; }else { totalInvestProject = "累计投资金额(亿)"; totalInvestValue = "8886.4878"; investContent = totalInvestProject +"\n"+totalInvestValue; } flag = !flag; //设置需要显示的文本 SpannableString spannableString = new SpannableString(investContent); //总体设置需要显示的汉子文本样式 //文本的颜色 ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.GRAY); //绝对大小(文字字体) AbsoluteSizeSpan fontSpan = new AbsoluteSizeSpan(DensityUtils.sp2px(this,12)); //实现字符串各种形式风格(属性)的显示,从哪里开始到哪里结束显示其属性值的变化 spannableString.setSpan(colorSpan,0,totalInvestProject.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(fontSpan,0,totalInvestProject.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); //总体设置需要显示的数字文本样式 ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.RED); AbsoluteSizeSpan fontSpan1 = new AbsoluteSizeSpan(DensityUtils.sp2px(this,26)); /*此时用下面直接找长度的方法时,会出现覆盖的情况,导致结果出差错*/// spannableString.setSpan(colorSpan1,0,totalInvestValue.length(),Spanned.SPAN_INCLUSIVE_EXCLUSIVE);// spannableString.setSpan(fontSpan1,0,totalInvestValue.length(),Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(colorSpan1,totalInvestProject.length()+"\n".length(),investContent.length(),Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(fontSpan1,totalInvestProject.length()+"\n".length(),investContent.length(),Spanned.SPAN_INCLUSIVE_EXCLUSIVE); //设置TextSwicher需要显示的文本 mTextSwitcher.setText(spannableString); //设置其自动循环,其间隔播放时间为1.5秒 mTextSwitcher.postDelayed(new Runnable() { @Override public void run() { if(!isFinishing()) { nextInvestInfo(); } } },1500); }
以上,就可以实现其效果了
同时,其实现加载图片写法如下:
SpannableString spanString = new SpannableString("欢迎光临Harvic的博客"); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setText(spanString);
以上,ok
另外补充:
Spanny,SpannableStringBuilder, SpannableString三者之间的关系
1,Spanny extends SpannableStringBuilder
2,SpannableStringBuilder是可拼接的,及可以调用append()
3,SpannableString是不可拼接的
如下图效果:每个字大小不一
实现代码:
Spanny spanny = new Spanny(str[0]+".",new AbsoluteSizeSpan(38,true)) .append(str[1], new AbsoluteSizeSpan(22,true)) .append("折", new AbsoluteSizeSpan(16, true));} text.setText(spanny );
实现每个字的大小和颜色不一样:
Spanny title = new Spanny("财富\n", new ForegroundColorSpan(getResources().getColor(R.color.white)), new AbsoluteSizeSpan(DensityUtils.sp2px(getActivity(), 16))) .append(HiderFormatUtils.getPhone(phoneNumber), new ForegroundColorSpan(getResources().getColor(R.color.white)), new AbsoluteSizeSpan(DensityUtils.sp2px(getActivity(), 12)));
以上:就补充到这
阅读全文
0 0
- TextSwitcher文本选择器实现走马灯效果,及Spanny,SpannableStringBuilder和SpannalbeString的应用
- 实现datalist的走马灯效果
- 老罗安卓教程 在TextView文本中实现走马灯效果
- css3选择器、背景、边框、渐变、阴影以及文本效果的介绍及实现
- 如何实现repeater的走马灯效果
- 实现datalist的走马灯效果(滚动)
- JS实现文字的走马灯效果
- Android走马灯滚动效果的实现
- 实现走马灯效果
- iOS实现走马灯效果
- Html走马灯效果实现
- TextView实现走马灯效果
- DataGrid的走马灯效果
- TextView的走马灯效果
- 王学岗TextSwitcher的应用
- Android textview和listview实现水平自动滚动的走马灯效果
- 通过TextSwitcher实现上下滚动的广告动画效果
- Hack5-用TextSwitcher和ImageSwitcher打造漂亮的动画效果
- c++STL基础部分(一)
- Linux中chown命令介绍
- 程序关闭时在#pragma warning(suppress: 4985)处中断
- android 相对布局
- 建立一个中文名字的文件夹Python
- TextSwitcher文本选择器实现走马灯效果,及Spanny,SpannableStringBuilder和SpannalbeString的应用
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋
- 类文件结构
- 强连通分量 POJ 3180 The Cow Prom题解
- hdu-1241 Oil Deposits
- java实现二分查找
- 选择排序
- 18.activiti工作流-业务层面
- Javascript中apply、call、bind