TextView上下滚动
- public class AutoTextView extends TextSwitcher implements ViewFactory {
- private float mHeight;
- private Context mContext;
- //mInUp,mOutUp分别构成向下翻页的进出动
- private Rotate3dAnimation mInUp;
- private Rotate3dAnimation mOutUp;
- final int[] auto3d = {
- 0x7f010000
- };
- //mInDown,mOutDown分别构成向下翻页的进出动
- private Rotate3dAnimation mInDown;
- private Rotate3dAnimation mOutDown;
- public AutoTextView(Context context) {
- this(context, null);
- }
- public AutoTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- TypedArray a = context.obtainStyledAttributes(attrs, auto3d);
- mHeight = a.getDimension(0, 15);
- a.recycle();
- mContext = context;
- init();
- }
- private void init() {
- setFactory(this);
- mInUp = createAnim(-90, 0, true, true);
- mOutUp = createAnim(0, 90, false, true);
- mInDown = createAnim(90, 0, true, false);
- mOutDown = createAnim(0, -90, false, false);
- //TextSwitcher主要用于文件切换,比�? 从文字A 切换�? 文字 B�?
- //setInAnimation()后,A将执行inAnimation�?
- //setOutAnimation()后,B将执行OutAnimation
- setInAnimation(mInUp);
- setOutAnimation(mOutUp);
- }
- private Rotate3dAnimation createAnim(float start, float end, boolean turnIn, boolean turnUp) {
- final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end, turnIn, turnUp);
- rotation.setDuration(300);
- rotation.setFillAfter(false);
- rotation.setInterpolator(new AccelerateInterpolator());
- return rotation;
- }
- //这里返回的TextView,就是我们看到的View
- @Override
- public View makeView() {
- TextView t = new TextView(mContext);
- t.setGravity(Gravity.CENTER);
- t.setTextSize(mHeight);
- t.setSingleLine(true);
- t.setTextColor(R.color.black);
- return t;
- }
- //定义动作,向下滚动翻�?
- public void previous() {
- if (getInAnimation() != mInDown) {
- setInAnimation(mInDown);
- }
- if (getOutAnimation() != mOutDown) {
- setOutAnimation(mOutDown);
- }
- }
- //定义动作,向上滚动翻�?
- public void next() {
- if (getInAnimation() != mInUp) {
- setInAnimation(mInUp);
- }
- if (getOutAnimation() != mOutUp) {
- setOutAnimation(mOutUp);
- }
- }
- class Rotate3dAnimation extends Animation {
- private final float mFromDegrees;
- private final float mToDegrees;
- private final boolean mTurnIn;
- private final boolean mTurnUp;
- private float mCenterX;
- private float mCenterY;
- private Camera mCamera;
- public Rotate3dAnimation(float fromDegrees, float toDegrees, boolean turnIn, boolean turnUp) {
- mFromDegrees = fromDegrees;
- mToDegrees = toDegrees;
- mTurnIn = turnIn;
- mTurnUp = turnUp;
- }
- @Override
- public void initialize(int width, int height, int parentWidth, int parentHeight) {
- super.initialize(width, height, parentWidth, parentHeight);
- mCamera = new Camera();
- mCenterY = getHeight() / 2;
- mCenterX = getWidth() / 2;
- }
- @Override
- protected void applyTransformation(float interpolatedTime, Transformation t) {
- final float fromDegrees = mFromDegrees;
- float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
- final float centerX = mCenterX;
- final float centerY = mCenterY;
- final Camera camera = mCamera;
- final int derection = mTurnUp ? 1 : -1;
- final Matrix matrix = t.getMatrix();
- camera.save();
- if (mTurnIn) {
- camera.translate(0.0f, derection * mCenterY * (interpolatedTime - 1.0f), 0.0f);
- } else {
- camera.translate(0.0f, derection * mCenterY * (interpolatedTime), 0.0f);
- }
- camera.rotateX(degrees);
- camera.getMatrix(matrix);
- camera.restore();
- matrix.preTranslate(-centerX, -centerY);
- matrix.postTranslate(centerX, centerY);
- }
- }
- }
第二步,这里写个Handler来循环滚动TextView内容
- private Handler handler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- switch (msg.what) {
- case 1001:
- handler.sendEmptyMessageDelayed(1001, 4000);
- mStringArray = new ArrayList<>();
- mStringArray.add("滚动字体一");
- mStringArray.add("滚动字体二");
- if (mStringArray.size() != 0) {
- int i = mLoopCount % mStringArray.size();
- tv_main_inform.next();
- tv_main_inform.setText(mStringArray.get(i));
- mLoopCount++;
- // handler.sendEmptyMessageDelayed(FLAG, 5000);
- }
- break;
- }
- };
- };
这里写的这个handler有点麻烦了,后面我用了一个新写法:
- mStringArray = new ArrayList<>();
- mStringArray.add("滚动字体一");
- mStringArray.add("滚动字体二");
- Observable.interval(0, 4, TimeUnit.SECONDS).subscribe {
- if (mStringArray.size() != 0) {
- int i = mLoopCount % mStringArray.size();
- tv_main_inform.next();
- tv_main_inform.setText(mStringArray.get(i));
- mLoopCount++;
- // handler.sendEmptyMessageDelayed(FLAG, 5000);
- }}
TextView上下滚动的更多相关文章
- Android:TextView 自动滚动(跑马灯) (转)
Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true ...
- Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果
一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...
- android TextView 垂直滚动 用动画实现
项目中需要让TextView 滚动一会显示一行一会显示一行 想了下用移动动画实现.但是实际中在整这个动画时调了好久.主要用到的动画方式是移动动画:TranslateAnimation 代码: PS: ...
- android TextView实现滚动显示效果
在android中,如果设置了TextView控件为单行显示,且显示的文本太长的话,默认情况下会造成显示不全的情况,这种情况下我们需要设置该控件属性如下: <TextView android:i ...
- ScrollView嵌套ListView显示不完全、嵌套TextView不能滚动解决办法
目录: 一.情景说明 二.最初做法 三.解决办法 一.情景说明 1.情景 最近项目刚好有一个需求,需要在一个界面中用ScrollView嵌套一个滚动的TextView和一个listView ...
- Android TextView 横向滚动(跑马灯效果)
Android TextView 中当文字比較多时希望它横向滚动显示,以下是一种亲測可行的方法. 效果图: 1.自己定义TextView,重写isFocused()方法返回true,让自己定义Text ...
- 20150618_Andriod_设置TextView垂直滚动
布局文件 android:scrollbars="vertical" android:singleLine="false" 代码文件 ctl_tv_conten ...
- TextView文字滚动效果
ScrollText.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...
- 关于Android使TextView可以滚动的设置
添加一行代码…… textView.setMovementMethod(ScrollingMovementMethod.getInstance());
随机推荐
- 第1章 Python学习环境构建目录
第1章 引子 第1.1节 学习环境搭建 第1.2节 Python学习环境的使用 第2章 Python编程基础知识 第2.1节 简单的Python数据类型.变量赋值及输入输出 第2.2节 Python的 ...
- Python基础知识学习随笔
Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量 Python学习随笔:获取当前主机名和用户名的方法 博客地址:https://blog.csdn.net/LaoYuanPyt ...
- PyQt(Python+Qt)学习随笔:clicked和clicked(bool)信号连接同名函数出现的问题
在Qt中,控件中的clicked()信号和clicked(bool)信号是两个不同的信号,映射槽函数时,clicked()信号映射到的槽函数是不带参的,clicked(bool)信号映射到的槽函数是带 ...
- c++11-17 模板核心知识(十五)—— 解析模板之依赖型类型名称与typename Dependent Names of Types
模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templ ...
- 【Alpha冲刺阶段】Scrum Meeting Daily6
[Alpha冲刺阶段]Scrum Meeting Daily6 1.会议简述 会议开展时间 2020/5/27 8:00 - 8:15 PM 会议基本内容摘要 每日汇报 个人进度.遇到的困难.明日的计 ...
- 面试官:小伙子,你给我简单说一下RocketMQ 整合 Spring Boot吧
前言 在使用SpringBoot的starter集成包时,要特别注意版本.因为SpringBoot集成RocketMQ的starter依赖是由Spring社区提供的,目前正在快速迭代的过程当中,不同版 ...
- Hadoop框架:Yarn基本结构和运行原理
本文源码:GitHub·点这里 || GitEE·点这里 一.Yarn基本结构 Hadoop三大核心组件:分布式文件系统HDFS.分布式计算框架MapReduce,分布式集群资源调度框架Yarn.Ya ...
- 小米k30 pro刷国际版rom
时间:2020.8.20 最新的是miui12但是普遍反映耗电量巨大,所以还是刷miui11了. 知乎上有个教程:https://zhuanlan.zhihu.com/p/86160027 但是是针对 ...
- robotframework中的参数展开
robot调用关键字传参的方式是用分隔符分开不同参数,如 keyword arg1 arg2 arg3 arg4 当参数中传入了使用@符号的列表变量时,@符号会将列表展开: @{list1}= Cre ...
- 阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
当你购买了阿里云的ecs,涉及ecs的有两个密码,一定要搞清楚,一个密码是远程链接密码,也就是通过浏览器连接服务器的密码,另外一个是实例密码,这个密码就是ecs的root密码,一般情况下,我们经常用到 ...