对于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<String> 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了:

<com.example.ubt.proguardtest.view.SwitchTextView
    android:id="@+id/switch_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    app:layout_constraintTop_toTopOf="@+id/img_zoom"
    app:layout_constraintBottom_toBottomOf="@id/text">

</com.example.ubt.proguardtest.view.SwitchTextView>

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

这里主要分为三步:

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

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

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

TextView实现自动上下滚动的效果(TextSwitcher)相关推荐

  1. Android之高仿京东APP首页“京东快报”自动向上滚动的广告条

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51013562 本文出自:[顾林海的博客] ##前言 上次在京东APP上 ...

  2. 仿京东首页的京东快报,自动向上滚动的广告条

    向上滚动的广告条 实现原理 起初看到这个效果时,第一个想法就是向上移动动画+定时器,但当我准备写时发现,滚动时上下文字都是逐渐出来的(有点像滑动的),如果用动画的话不行,如果用滑动的话,那就是List ...

  3. Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理

    Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理 目录 Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事 ...

  4. TextSwitcher实现文本自动垂直滚动

    本文转载自[http://blog.csdn.net/u014369799/article/details/50337229] 实现功能:用TextSwitcher实现文本自动垂直滚动,类似淘宝首页广 ...

  5. jQuery实现自动左右滚动效果的代码实例

    2019独角兽企业重金招聘Python工程师标准>>> jQuery实现自动左右滚动效果的代码实例 思路: 点击滚动模式下,是为点击(向前/向后/数字)添加click事件,通过控制展 ...

  6. html中图片自动循环滚动代码,JavaScript代码实现图片循环滚动效果

    1.概述 循环滚动图片,不仅可以增添Web页面的动态效果,而且可以节省页面空间,有效地保证在有限的页面中显示更多的图片. 2.技术要点 主要应用setTimeout()方法实现图片的循环滚动效果.se ...

  7. 【UGUI】如何实现自动滚动文本效果

    当我们在制作UI使用Text时,如果文本信息过长,有两种处理方式,一种是换行展示,另一种则是滚动展示,下面博主将给大家介绍如何制作自动滚动文本. 第一步,创建一个Image(GameObject &g ...

  8. CSS+JS自动循环滚动的多图片幻灯切换展示效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Android TextView循环滚动弹幕效果

    最近做需求要写一个滚动弹幕的特效,要求是一直循环滚动,并且从左边出去部分的要从右边进入. ​​​​​​​ 1.首先想到的是用Android TextView自带的跑马灯效果,设置一下android:e ...

最新文章

  1. Linux中Sleep和Wait命令的使用方式
  2. R 操作矩阵和计算SVD的基本操作记录
  3. Python类及面向对象编程【转】
  4. jboss8日志级别设置_罐中研讨会:设置JBoss BPM Suite全日研讨会
  5. logback slf4j_强制Tomcat通过SLF4J / Logback登录
  6. shell下将文件中的分隔符从‘\t‘转换成‘,‘
  7. 95-36-032-ChannelHandler-SimpleChannelInboundHandler
  8. 最新搜索引擎网站提交登录入口和收录入口大全
  9. mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南
  10. 【ABAP系列】SAP DOI技术中I_OI_SPREADSHEET接口的使用
  11. 安装docker提示“Another app is currently holding the yum lock; waiting for it to exit“之解决办法
  12. 电子病历系统中痕迹保留的应用意义
  13. 百度网盘 海量资源链接
  14. leetcode1-5
  15. 12点转成0点(原因时间格式化为十二小时制导致)
  16. Atcoder F - Mirrored(思维+搜索)
  17. [论文阅读] EIE: Efficient Inference Engine on Compressed Neural Network
  18. 【应用随机过程】02. 马尔可夫链及其概率分布
  19. Python实现线性插值和三次样条插值
  20. Cross-modality Person re-identification with Shared-Specific Feature Transfer笔记

热门文章

  1. 系统架构专题(1):大型互联网系统架构演变
  2. mathtype使用方法
  3. 闲来无事,说说Windows剪贴板 -- 剪贴板概述部分
  4. kalilinux安装中文输入法 安装fcitx,小企鹅输入法问题
  5. eclipse更换国内镜像,提高下载安装插件的速度
  6. 【目标检测】基于yolov6的钢筋检测和计数(附代码和数据集)
  7. 三分钟教你OFD文件怎么看
  8. 南京小米java面经(一面)
  9. Proteus小技巧:端口的批量编号
  10. 【PTA】6-1 顺序表基本操作(10 分)