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://download.csdn.net/detail/u011275152/9696827

更多相关文章

  1. Android定义的路径全局变量
  2. 自定义View
  3. Android导航滑动文字渐变+底部指示条
  4. Android自定义Button背景色,弧度
  5. Android 工程混淆后无法找到自定义控件类的解决方案
  6. 转:善用Android预定义样式来为我们的布局设置效果,大大节约代码量
  7. Android自定义ProgressBar样式:渐变圆角水平进度条

随机推荐

  1. Android开发知识概要
  2. Android SO文件的兼容和适配
  3. Android(安卓)sqlite 采用execSQL和rawQu
  4. android中的Handler(1)
  5. Android(安卓)渗透测试学习手册 第六章
  6. 构建Android电话相关的应用
  7. Android 音视频开发(五) : OpenGL ES API
  8. Application Fundamentals --1.2
  9. 在eclipse中添加插件Green UML
  10. Android自动化测试之MonkeyRunner工具(六)