文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android实现文字滚动效果

2022-06-06 05:40

关注

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实现文字上下滚动效果


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯