Android实现文字滚动效果

 更新时间:2016年11月29日 17:14:23   作者:Lbins  
这篇文章主要为大家详细介绍了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实现简易计算器

    Android Studio实现简易计算器

    这篇文章主要为大家详细介绍了Android Studio实现简易计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android Studio手动配置Gradle的方法

    Android Studio手动配置Gradle的方法

    Gradle:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置,本文给大家介绍Android Studio手动配置Gradle的方法,一起看看吧
    2017-11-11
  • Android Studio ADB网络调试汇总

    Android Studio ADB网络调试汇总

    这篇文章主要为大家详细介绍了Android Studio ADB网络调试的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android开发之HTTP访问网络

    Android开发之HTTP访问网络

    这篇文章主要介绍了Android开发之HTTP访问网络的相关资料,需要的朋友可以参考下
    2016-07-07
  • Kotlin中的密封类和密封接口及其应用场景

    Kotlin中的密封类和密封接口及其应用场景

    在Kotlin中,密封类和密封接口是用于表示受限类型层次结构的特殊类和接口。密封类和密封接口可以在一定程度上限制类型的继承层次,使编译器能够更好地检测代码中的错误,并增强代码的可读性和可维护性
    2023-05-05
  • Android TextView 去掉自适应默认的fontpadding的实现方法

    Android TextView 去掉自适应默认的fontpadding的实现方法

    这篇文章主要介绍了Android TextView 去掉自适应默认的fontpadding的实现方法的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • 微博API常用方法总结(必看篇)

    微博API常用方法总结(必看篇)

    下面小编就为大家带来一篇微博API常用方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Android AndFix热修复原理详情

    Android AndFix热修复原理详情

    这篇文章主要介绍了Android AndFix热修复原理详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值吗,需要的小伙伴可以参考一下
    2022-08-08
  • 基于SurfaceView实现可拖动视频控件

    基于SurfaceView实现可拖动视频控件

    这篇文章主要为大家详细介绍了基于SurfaceView的可拖动视频控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 深入理解Android中View绘制的三大流程

    深入理解Android中View绘制的三大流程

    这篇文章主要给大家介绍了关于Android中View绘制的三大流程,View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局和绘制,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07

最新评论