跳(律动)动的(电话号码)文字

来源:互联网 发布:vue.js 格式化 编辑:程序博客网 时间:2024/04/30 03:20

转载请注明出处:(http://blog.csdn.net/atoliu/article/details/50525032)

跳动的电话号码

在最近项目开发的过程中需要实现很多动画,而且基本是在做一个IOS风格的APP,所以作为开发工程师,只能默默的接下所有的需求。

需要实现的效果如下:

效果图

当拿到这个东西的时候,我想这是简单的,没想到在实现的过程中 坑还是很多的.

最开始的时候 我的想法是通过TextView 中重写onDraw方法,然后不停的绘制电话号码,通过计算每个字符的位置来实现,但是在实现的过程中发现动画的流畅性非常差,最后放弃了。

后面的我还是选择和最Low的办法,把电话号码分割为一个个TextView 通过在代码中动态添加TextView的个数来实现。

主要方法如下:
通过 代码中得到电话号码,然后动态向里面添加 View

  private void initNumber() {        char[] num = TELEPHONE_NUMBER.toCharArray();        for (int i = 0; i < num.length; i++) {            TextView textView = (TextView) getLayoutInflater().inflate(R.layout.text_phone_number, null);            textView.setText(num[i]+"");// 防止出现 查找资源文件            mPhoneNumberLayout.addView(textView);            ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "translationY", 0f, -10f, -20f, -10f, 0f);            animator.setDuration(300);            textView.setTag(animator);        }    }        `然后通过 Handler和计数器 实现 每个子View 动画的顺序执行,如下` /**电话号码的 动画*/    private void phoneNumberAnimation(int i){        View view =mPhoneNumberLayout.getChildAt(i);        Animator animator =(Animator)view.getTag();        animator.start();        long dey = animator.getDuration() * 2 / mPhoneNumberLayout.getChildCount();        mHandler.sendEmptyMessageDelayed(START_PHONE_NUMBER_AINMATION,dey);    }

同时电话icon也有动画,如下:

/**电话icon的 动画*/    private void phoneIconAnimation(){        //相对自身 旋转 30度        RotateAnimation animation =new RotateAnimation(0,30, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);        animation.setRepeatCount(1);//抖动 2次        animation.setDuration(100);        animation.setFillAfter(true);        mPhoneIcon.startAnimation(animation);        mHandler.sendEmptyMessageDelayed(START_PHONE_ICON_AINMATION,300);    }

最终流畅的实现了设计师所需的效果(实际真机上的效果 要比 此 gif 录制的效果流畅 大家可以给我推荐一款 gif 录制工具),效果图如下:

animation

大家可以通过扫描下面的二维码来添加我

微信二维码

源码github地址:跳动的文字

0 0
原创粉丝点击