文本特效

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

相關文章
相關標籤/搜索