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方法