热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现文字滚动效果

这篇文章主要为大家详细介绍了Android实现文字滚动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android 实现文字滚动效果,自己写了个timer小计时器,textview文字上下翻动效果:

public class AutoTextView extends TextSwitcher implements
  ViewSwitcher.ViewFactory {

 private float mHeight;
 private Context mContext;
 //mInUp,mOutUp分别构成向下翻页的进出动画
 private Rotate3dAnimation mInUp;
 private Rotate3dAnimation mOutUp;
 
 //mInDown,mOutDown分别构成向下翻页的进出动画
 private Rotate3dAnimation mInDown;
 private Rotate3dAnimation mOutDown;
 
 public AutoTextView(Context context) {
  this(context, null);
  // TODO Auto-generated constructor stub
 }

 public AutoTextView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.auto3d);
  mHeight = a.getDimension(R.styleable.auto3d_textSize, 16);
  a.recycle();
  mCOntext= context;
  init();
 }

 private void init() {
  // TODO Auto-generated method stub
  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(800);
  rotation.setFillAfter(false);
  rotation.setInterpolator(new AccelerateInterpolator());
  return rotation;
 }

 //这里返回的TextView,就是我们看到的View
 @Override
 public View makeView() {
  // TODO Auto-generated method stub
  TextView t = new TextView(mContext);
  t.setGravity(Gravity.CENTER);
  t.setTextSize(16);
  t.setMaxLines(1);
  t.setTextColor(mContext.getResources().getColor(R.color.textColor));
  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 float mCenterX;
   private float mCenterY;
   private final boolean mTurnIn;
   private final boolean mTurnUp;
   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);
   }
 }

demo下载链接:http://xiazai.jb51.net/201611/yuanma/AndroidTextView(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文将详细介绍如何在Android Studio中导入和编译OSChina Android 2.4版本的源码。包括所需软件、下载地址以及一些注意事项。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
author-avatar
佳蓁政睿9
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有