文本特效

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

相关文章
相关标签/搜索