1. public class AutoTextView extends TextSwitcher implements ViewFactory {
  2. private float mHeight;
  3. private Context mContext;
  4. //mInUp,mOutUp分别构成向下翻页的进出动
  5. private Rotate3dAnimation mInUp;
  6. private Rotate3dAnimation mOutUp;
  7. final int[] auto3d = {
  8. 0x7f010000
  9. };
  10. //mInDown,mOutDown分别构成向下翻页的进出动
  11. private Rotate3dAnimation mInDown;
  12. private Rotate3dAnimation mOutDown;
  13. public AutoTextView(Context context) {
  14. this(context, null);
  15. }
  16. public AutoTextView(Context context, AttributeSet attrs) {
  17. super(context, attrs);
  18. TypedArray a = context.obtainStyledAttributes(attrs, auto3d);
  19. mHeight = a.getDimension(0, 15);
  20. a.recycle();
  21. mContext = context;
  22. init();
  23. }
  24. private void init() {
  25. setFactory(this);
  26. mInUp = createAnim(-90, 0, true, true);
  27. mOutUp = createAnim(0, 90, false, true);
  28. mInDown = createAnim(90, 0, true, false);
  29. mOutDown = createAnim(0, -90, false, false);
  30. //TextSwitcher主要用于文件切换,比�? 从文字A 切换�? 文字 B�?
  31. //setInAnimation()后,A将执行inAnimation�?
  32. //setOutAnimation()后,B将执行OutAnimation
  33. setInAnimation(mInUp);
  34. setOutAnimation(mOutUp);
  35. }
  36. private Rotate3dAnimation createAnim(float start, float end, boolean turnIn, boolean turnUp) {
  37. final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end, turnIn, turnUp);
  38. rotation.setDuration(300);
  39. rotation.setFillAfter(false);
  40. rotation.setInterpolator(new AccelerateInterpolator());
  41. return rotation;
  42. }
  43. //这里返回的TextView,就是我们看到的View
  44. @Override
  45. public View makeView() {
  46. TextView t = new TextView(mContext);
  47. t.setGravity(Gravity.CENTER);
  48. t.setTextSize(mHeight);
  49. t.setSingleLine(true);
  50. t.setTextColor(R.color.black);
  51. return t;
  52. }
  53. //定义动作,向下滚动翻�?
  54. public void previous() {
  55. if (getInAnimation() != mInDown) {
  56. setInAnimation(mInDown);
  57. }
  58. if (getOutAnimation() != mOutDown) {
  59. setOutAnimation(mOutDown);
  60. }
  61. }
  62. //定义动作,向上滚动翻�?
  63. public void next() {
  64. if (getInAnimation() != mInUp) {
  65. setInAnimation(mInUp);
  66. }
  67. if (getOutAnimation() != mOutUp) {
  68. setOutAnimation(mOutUp);
  69. }
  70. }
  71. class Rotate3dAnimation extends Animation {
  72. private final float mFromDegrees;
  73. private final float mToDegrees;
  74. private final boolean mTurnIn;
  75. private final boolean mTurnUp;
  76. private float mCenterX;
  77. private float mCenterY;
  78. private Camera mCamera;
  79. public Rotate3dAnimation(float fromDegrees, float toDegrees, boolean turnIn, boolean turnUp) {
  80. mFromDegrees = fromDegrees;
  81. mToDegrees = toDegrees;
  82. mTurnIn = turnIn;
  83. mTurnUp = turnUp;
  84. }
  85. @Override
  86. public void initialize(int width, int height, int parentWidth, int parentHeight) {
  87. super.initialize(width, height, parentWidth, parentHeight);
  88. mCamera = new Camera();
  89. mCenterY = getHeight() / 2;
  90. mCenterX = getWidth() / 2;
  91. }
  92. @Override
  93. protected void applyTransformation(float interpolatedTime, Transformation t) {
  94. final float fromDegrees = mFromDegrees;
  95. float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
  96. final float centerX = mCenterX;
  97. final float centerY = mCenterY;
  98. final Camera camera = mCamera;
  99. final int derection = mTurnUp ? 1 : -1;
  100. final Matrix matrix = t.getMatrix();
  101. camera.save();
  102. if (mTurnIn) {
  103. camera.translate(0.0f, derection * mCenterY * (interpolatedTime - 1.0f), 0.0f);
  104. } else {
  105. camera.translate(0.0f, derection * mCenterY * (interpolatedTime), 0.0f);
  106. }
  107. camera.rotateX(degrees);
  108. camera.getMatrix(matrix);
  109. camera.restore();
  110. matrix.preTranslate(-centerX, -centerY);
  111. matrix.postTranslate(centerX, centerY);
  112. }
  113. }
  114. }

第二步,这里写个Handler来循环滚动TextView内容

  1. private Handler handler = new Handler() {
  2. public void handleMessage(android.os.Message msg) {
  3. switch (msg.what) {
  4. case 1001:
  5. handler.sendEmptyMessageDelayed(1001, 4000);
  6. mStringArray = new ArrayList<>();
  7. mStringArray.add("滚动字体一");
  8. mStringArray.add("滚动字体二");
  9. if (mStringArray.size() != 0) {
  10. int i = mLoopCount % mStringArray.size();
  11. tv_main_inform.next();
  12. tv_main_inform.setText(mStringArray.get(i));
  13. mLoopCount++;
  14. // handler.sendEmptyMessageDelayed(FLAG, 5000);
  15. }
  16. break;
  17. }
  18. };
  19. };

这里写的这个handler有点麻烦了,后面我用了一个新写法:

  1. mStringArray = new ArrayList<>();
  2. mStringArray.add("滚动字体一");
  3. mStringArray.add("滚动字体二");
  4. Observable.interval(0, 4, TimeUnit.SECONDS).subscribe {
  5. if (mStringArray.size() != 0) {
  6. int i = mLoopCount % mStringArray.size();
  7. tv_main_inform.next();
  8. tv_main_inform.setText(mStringArray.get(i));
  9. mLoopCount++;
  10. // handler.sendEmptyMessageDelayed(FLAG, 5000);
  11. }}

TextView上下滚动的更多相关文章

  1. Android:TextView 自动滚动(跑马灯) (转)

    Android:TextView 自动滚动(跑马灯)       TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true ...

  2. Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果

    一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...

  3. android TextView 垂直滚动 用动画实现

    项目中需要让TextView 滚动一会显示一行一会显示一行 想了下用移动动画实现.但是实际中在整这个动画时调了好久.主要用到的动画方式是移动动画:TranslateAnimation 代码: PS: ...

  4. android TextView实现滚动显示效果

    在android中,如果设置了TextView控件为单行显示,且显示的文本太长的话,默认情况下会造成显示不全的情况,这种情况下我们需要设置该控件属性如下: <TextView android:i ...

  5. ScrollView嵌套ListView显示不完全、嵌套TextView不能滚动解决办法

    目录: 一.情景说明 二.最初做法 三.解决办法 一.情景说明 1.情景       最近项目刚好有一个需求,需要在一个界面中用ScrollView嵌套一个滚动的TextView和一个listView ...

  6. Android TextView 横向滚动(跑马灯效果)

    Android TextView 中当文字比較多时希望它横向滚动显示,以下是一种亲測可行的方法. 效果图: 1.自己定义TextView,重写isFocused()方法返回true,让自己定义Text ...

  7. 20150618_Andriod_设置TextView垂直滚动

    布局文件 android:scrollbars="vertical" android:singleLine="false" 代码文件 ctl_tv_conten ...

  8. TextView文字滚动效果

    ScrollText.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  9. 关于Android使TextView可以滚动的设置

    添加一行代码…… textView.setMovementMethod(ScrollingMovementMethod.getInstance());

随机推荐

  1. Python怎么控制将一个整数输出成指定长的十六进制数?

    使用format方法,在格式控制中进行控制,具体控制参数为: {:#016X} 其中: 大括号表示该处从后面的format的参数中取值 冒号表示格式控制开始 0表示长度不足16位补0 16表示长度 X ...

  2. 第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解

    上节介绍了__new__()方法这个比构造方法还重要的方法的语法,本节通过案例来详细剖析__new__()方法的细节以及它与构造方法之间的关系. 一.    案例说明 本节以圆Cir类为例来说明,为了 ...

  3. 转:为什么说Python是最值得学习的编程语言

    老猿作为一个老程序员,研究生毕业后就没有这么用心的学过一门新的语言,而今年4月开始学Python以来,疯狂的迷上了它,有时很想写一篇为什么要学Python的文章,可一直懒没动笔,今天看到博友" ...

  4. Samba服务器搭建,匿名访问,用户密码访问

    环境 #服务端:centos7 客户端:centos7,windows10 配置yum源,使用光盘镜像安装Samba服务 #挂载光盘:mount  /dev/sr0  /mnt/cdrom #安装sa ...

  5. 关于EF框架EntityState的几种状态

    在使用EF框架时,我们通常都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加.修改还是删除呢?答案是通过EntityState的枚举值来判断 ...

  6. js 几种跨域解决方法

    同源策略: JS只能与同一个域中的页面进行通讯,必须是协议.域名.端口都相同,相同域下才能相互通信,这可以被认为是一种通信原则,叫同源策略. 跨域: js跨域是指通过js在不同的域之间进行数据传输或通 ...

  7. 微软面试题:剑指 Offer 51. 数组中的逆序对 Hard 出现次数:3

    题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对. 输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5 限制: ...

  8. Centos安装JDK、Tomcat

    准备工作,先下载JDK.Tomcat包:使用FileZilla将软件包发送到/home/software目录下. 1 安装JDK8 首先卸载已有的JDK. # 查看版本 java -version # ...

  9. Jmeter(9)常用定时器

    测试计划中元件的执行顺序依次为: 配置元件--逻辑控制器--前置处理器--定时器--取样器--后置处理器--断言--监听器 一.定时器作用域 1.定时器是在每个取样器之前执行的,无论定时器是在取样器之 ...

  10. jmeter__编写脚本学习笔记、备忘

    web持续添加 前言: 1. token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件:也叫关联 2. cookie就是写在客户端的一个txt文件,里面包括你登录信息之 ...