文本特效

1.滚动文本

        <!--单行,溢出滚动,获得光标,滚动无限次-->
android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever"

 

 2.自定义控件实现文字滚动

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中引用自定义方法设置滚动效果

zdyMarqueeTextView = (ZDYMarqueeTextView)  findViewById(R.id.mytextviewscroll);
        zdyMarqueeTextView.startMarquee();//启动滚动效果
        zdyMarqueeTextView.setSpeed(10);
        zdyMarqueeTextView.setTime(40);

 

 此方法不像直接使用MARQUEE方法,获得的焦点只有一个,这种方法可以实现多个滚动文字同时。

 

3使用HTML改变文字属性

在mainactivity中

        Spanned spanned= Html.fromHtml("欢迎来到滚动文本实验室,<font color='#002345'>开始android之旅</font>");
        zdyMarqueeTextView.setText(spanned);

4.使用SpannableString实现文本颜色,超链接,下划线等特效

//使用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的第一个参数:

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

 

转载于:https://www.cnblogs.com/missTS/p/5049258.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值