首页 > 系统 > Android > 正文

Android实现文字滚动效果

2019-12-12 04:28:26
字体:
来源:转载
供稿:网友

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.VeVB.COm/201611/yuanma/AndroidTextView(VeVB.COm).rar

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表