1.滚动文本android
<!--单行,溢出滚动,得到光标,滚动无限次-->
android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever"
2.自定义控件实现文字滚动ide
public class ZDYMarqueeTextView extends TextView {//自定义继承自textview的控件 private String myText;//文本内容 private int myTextWidth;//文本宽度 private int time = 100;//时间间隔 private int speed = 3;//每次偏移距离,速度 private int xoffset=0;//偏移量记录 private android.os.Handler myHandler;//子线程不能改变主线程UI private boolean isStop=true;//是否暂停 //时间和偏移距离可由用户设置zdyMarqueeTextView.setSpeed(10);zdyMarqueeTextView.setTime(40); public void setSpeed(int speed) { this.speed = speed; } public void setTime(int time) { this.time = time; } public ZDYMarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public void startMarquee() {//用来显示滚动效果zdyMarqueeTextView.startMarquee();//启动滚动效果 myText = this.getText().toString(); myTextWidth = (int) getPaint().measureText(myText);//画笔的measureText方法测量字符宽度,int类型 myHandler=new Handler(){ @Override public void handleMessage(Message msg) {//import android.os.Handler;import android.os.Message;否则出不来handleMessage方法 if (msg.what==0x11){ xoffset=xoffset+speed; if (xoffset>myTextWidth){//滚动超出 xoffset=0; scrollTo(0,0); } else{ scrollTo(xoffset,0);//滚动到的位置 } } super.handleMessage(msg); } }; startThread();//必定要开始调用开始线程方法 } public void startThread() { isStop=false; new Thread() { public void run() { while (!isStop) { try { Thread.sleep(time); myHandler.sendEmptyMessage(0x11); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start();//启用新线程,每隔一段时间文本偏移,达到文字滚动效果 } public void pause(){//暂停滚动 isStop=true; } public void goOn(){//继续滚动 startThread(); } @Override public boolean onTouchEvent(MotionEvent event) {//点击或者触摸暂停事件 switch (event.getAction()){ case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: pause(); break; default: goOn(); break; } return true; } }
而后在content_main.xml中引用字体
<com.example.victorxl.textviewscroll.ZDYMarqueeTextView android:id="@+id/mytextviewscroll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/title" android:textSize="25dp" android:singleLine="true" android:ellipsize="none"/>
在mainactivity中引用自定义方法设置滚动效果this
zdyMarqueeTextView = (ZDYMarqueeTextView) findViewById(R.id.mytextviewscroll); zdyMarqueeTextView.startMarquee();//启动滚动效果 zdyMarqueeTextView.setSpeed(10); zdyMarqueeTextView.setTime(40);
此方法不像直接使用MARQUEE方法,得到的焦点只有一个,这种方法能够实现多个滚动文字同时。spa
3使用HTML改变文字属性线程
在mainactivity中code
Spanned spanned= Html.fromHtml("欢迎来到滚动文本实验室,<font color='#002345'>开始android之旅</font>");
zdyMarqueeTextView.setText(spanned);
4.使用SpannableString实现文本颜色,超连接,下划线等特效xml
//使用SpannableString方法实现文字特效 String text="欢迎来到滚动文本实验室,开始android之旅"; SpannableString ss = new SpannableString(text); ss.setSpan(new ForegroundColorSpan(Color.RED),12,23,Spanned.SPAN_INCLUSIVE_INCLUSIVE);//从后半句变成红色 zdyMarqueeTextView.setText(ss);
setspan的第一个参数:blog
foregroundcolorspan文本颜色,继承
URLSpan超连接,
backgroundcolorspan背景颜色,
aboslutesizespan字体大小,
stylespan字体样式,
underlinespan下划线
PS:1.今天出现的小问题,让我很蛋疼。
不当心按了INSERT,光标变得很粗,搞得代码自动补全也没了,搞了很久才发现原来是按了INSERT键
2.快捷键:ALT+INSERT.调出GET和SET方法
CTRL+ALT+T,添加一些TRY if等等状况
后来又发现原来上面写了注释,下面代码补全没了,后来才发现原来注释要写在控件外面。。。
3.使用Handler的message方法时,导入import android.os.Handler;import android.os.Message;否则出不来handleMessage方法