博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TextView实现自动上下滚动的效果(TextSwitcher)
阅读量:4180 次
发布时间:2019-05-26

本文共 2502 字,大约阅读时间需要 8 分钟。

        对于TextView这个控件使我们在熟悉不过的了,但是有时候可能会有这样的需求:

        1、假如有10个文本内容,这些文本内容需要每隔几秒钟显示下一个;

        2、文本内容切换的时候需要有动画过渡效果,比如滚动效果,新的文字从下面进入,并从透明逐渐过渡到不透明,旧的文字从上面出去,并从不透明逐渐过渡到全透明。

        

        

上面就是我们要实现的效果,那要如何来实现呢?要实现这个效果,如果你知道TextSwitcher这个类,那就是so easy了。下面就用代码来搞一波:

public class SwitchTextView extends TextSwitcher {    public SwitchTextView(Context context) {        super(context);    }    public SwitchTextView(final Context context, AttributeSet attrs) {        super(context, attrs);        setFactory(new ViewFactory() {            @Override            public View makeView() {                //设置显示文字的TextView,内部实际会调用这个方法两次,进入和出去的textview就是从这里创建的                TextView tv = new TextView(context);                tv.setTextColor(Color.parseColor("#FF0000"));                tv.setTextSize(TypedValue.COMPLEX_UNIT_SP,23);                return tv;            }        });        TranslateAnimation translateIn = new TranslateAnimation(0, 0, 50, 0);        TranslateAnimation translateOut = new TranslateAnimation(0, 0, 0, -50);        AlphaAnimation alphaIn = new AlphaAnimation(0, 1);        AlphaAnimation alphaOut = new AlphaAnimation(1, 0);        AnimationSet animatorSetIn = new AnimationSet(true);        animatorSetIn.addAnimation(translateIn);        animatorSetIn.addAnimation(alphaIn);        animatorSetIn.setDuration(2000);        AnimationSet animatorSetOut = new AnimationSet(true);        animatorSetOut.addAnimation(translateOut);        animatorSetOut.addAnimation(alphaOut);        animatorSetOut.setDuration(2000);        //设置文字进入和出去的动画        setInAnimation(animatorSetIn);        setOutAnimation(animatorSetOut);    }    int position = 0;    int len;    //这里将所有需要滚动的文字传进来,并设置循环显示的时间    public void startPlay(final List
data) { if (data == null || data.size() == 0) { return; } len = data.size(); //设置下一个显示的文字 setText(data.get(position)); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { position++; post(new Runnable() { @Override public void run() { setText(data.get(position%len)); } }); } }, 3000, 3000); }}
这里写完后,xml中在布局一下就ok了:

最后在调用一下startPlay()方法就欧了,是不是特简单。

        这里主要分为三步:

        1、setFactory()设置显示文字的view,内部实际会用这个方法创建两个view,进入和出去的view;

        2、设置动画,通过setInAnimation()和setOutAnimation()两个方法设置进入和出去的动画;

        3、view和动画设置完后,最后就是调用setText()设置文字,这样就ok了。

你可能感兴趣的文章
菜鸟文科生的java之路:流程控制语句
查看>>
北海糖:Java初阶练习题
查看>>
不知道什么是数组?看这里就好了
查看>>
文科生北海唐的Java之路:方法(慕课)
查看>>
自学Java的轨迹线路
查看>>
如何更好的隐藏你自己,让我们谈谈什么是封装?
查看>>
文科生北海糖的:Java之路——继承
查看>>
Makefile 中:= ?= += =的区别
查看>>
消灭编译警告(Warning)
查看>>
(GCC) How can I hide "defined but not used" warnings in GCC?
查看>>
错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
查看>>
error: two or more data types in declaration specifiers原因及解决方法
查看>>
Linux驱动基础开发2
查看>>
ioctl在socket中的一些用法及示例
查看>>
Linux设备驱动--块设备(二)之相关结构体
查看>>
Linux设备驱动--块设备(四)之“自造请求”
查看>>
Nand Flash和Nor Flash相关知识
查看>>
NAND flash和NOR flash的区别
查看>>
writeb(), writew(), writel(),readb(), readw(), readl() 宏函数
查看>>
NOR Flash擦写和原理分析
查看>>