学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为2720,预计阅读7分钟

Android自定义动画

前面好几篇都是专门介绍了Android的动画效果,这一章我们就根据学习的内容做一个实战效果,达到学以致用的效果。

实现效果

上面视频中可以看到,我们把视频开始的那串文本“微卡智享,学更好的别人,做更好的自己”通过动画的效果逐一滚动的显示出来,并且在显示的过程中字体在不断的放大和向右下移动,当显示完后再按原路径显示回去。

实现思路

1.  定义一个PointText类,用于记录输入的字符串并进行拆分为数组,加入移动的偏移量和当前执行动画的位置。

2.  定义TypeEvaluator类,重写evaluate的方法,根据输入的参数计算出PointText类中的对应值。

3.  创建ValueAnimator动画,在addUpdateListener事件中得到的PointText的返回值对我们的Textview进行重新定位和显示

4. 设置动画属性,并播放动画

代码实现

微卡智享

PointText类

package dem.vac.animation;public class PointText {//当前偏移量public int curoffset;//当前是第几个文字public int curtext;//显示文字数组public char[] chararray;public PointText(String str) {//将传入的字符串拆为成Char数组chararray=str.toCharArray();curtext=0;curoffset=0;}//根据当前为第几个文字进行输出public String getChar() {return String.valueOf(chararray[curtext]);}}

上面的类来说没有什么特别的,主要的知识点就是看看String怎么转为Char数据,还有Char数组怎么返回String

PointTextEvaluator

package dem.vac.animation;import android.animation.TypeEvaluator;public class PointTextEvaluator implements TypeEvaluator {private PointText mPointText;public PointTextEvaluator(PointText pointText) {mPointText=pointText;}@Overridepublic Object evaluate(float v, Object int1, Object int2) {int starti=(int) int1;int endi=(int) int2;//计算当前位置偏移量mPointText.curoffset=(int) (starti + v * (endi - starti));//计算当前应该显示字的顺序mPointText.curtext=(int) (0 + v * (mPointText.chararray.length));if (mPointText.curtext == mPointText.chararray.length) {mPointText.curtext=mPointText.chararray.length - 1;}return mPointText;}
}

这里的TypeEvaluator我没用到泛型,是因为我的输入参数为两个integer的类型,用于设置输入的移动的开始和结束距离,而返回的参数就是我们的PointText的类,所以就用的默认Object的类型后进入强制转换。

ValueAnimator

private void InitPointText(String text) {//获取文本框初始的坐标XYfinal float oldx=tvshow.getX();final float oldy=tvshow.getY();//初始化PointTextPointText pointText=new PointText(text);//定义ValueAnimator动画ValueAnimator animator=ValueAnimator.ofObject(new PointTextEvaluator(pointText), 1, 200);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {PointText tmppt=(PointText) valueAnimator.getAnimatedValue();//设置文本框当前要显示的文字tvshow.setText(tmppt.getChar());//设置文本框当前的坐标tvshow.setX(oldx + tmppt.curoffset);tvshow.setY(oldy + tmppt.curoffset);//设置当前文本框的缩放大小tvshow.setScaleX(tmppt.curtext + 1);tvshow.setScaleY(tmppt.curtext + 1);//更新显示动画tvshow.requestLayout();}});//设置动画的速率,用LinearInterpolator为平均显示animator.setInterpolator(new LinearInterpolator());//设置播放时间animator.setDuration(5000);//设置播放完后倒序播放回来animator.setRepeatCount(1);animator.setRepeatMode(ValueAnimator.REVERSE);animator.start();}

整个ValueAnimator的创建代码,首先定义了PointText的类,然后在通过ValueAnimator.ofObject再创建了PointTextEvaluator,其中移动的数值参数设置为了1到50,在addUpdateListener事件中通过返回的PointText的类用于处理TextView应该显示的文字和移动的位置,最后设置了一下播放完后再按倒序的方式回放。

播放动画

这样就实现在我们文章开始视频的效果了,下面是做了个Gif的显示动图

扫描二维码

获取更多精彩

微卡智享

「 往期文章 」

学习|Android属性动画TypeEvaluator和Interpolator使用

学习|Android属性动画的组合动画之二--AnimatorSet

学习|Android属性动画的组合动画之一--AnimationSet

实战|Android文字滚动自定义动画相关推荐

  1. html 自动滚动通知,利用CSS3实现文字滚动通知动画特效

    特效描述:利用CSS3实现 文字滚动通知 动画特效.利用CSS3实现文字滚动通知动画特效 代码结构 1. HTML代码 .menu-list{list-style:none; width:300px; ...

  2. android之Animation自定义动画轨迹

    以下面一个实例来说说这个Animation自定义动画怎么使用. 图中,我们可以看出,小球是带有轨迹的向下滚动,而且,轨道与轨道之间的拼接是用二阶贝塞尔曲线实现的,小球模拟重力效果,加速度的向下滚.那么 ...

  3. android 文字滚动,全屏字幕滚动APP实现

    android 一款文字滚动App 下载app体验 https://download.csdn.net/download/qq_38355313/88063389 新增自定义文字大小和自定义滚动速度 ...

  4. android 文字滚动组件,Android textview 跑马灯文字滚动效果

    设置如下TextView控件文件的XML: android:id="@+id/textview" android:layout_width="match_parent&q ...

  5. android推箱子实验报告,[转载]【Android开发】自定义动画-推箱子的开始界面

    要涉及到这么几个类: MyPushBoxActivity.java:应用的主程序. WelcomeView.java:自定义的控件,也就是程序需要显示的界面. WelcomeViewDrawThrea ...

  6. Android 学习之自定义动画运用贝赛尔曲线

    ** 1:贝赛尔曲线简介 ** 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线 . 贝塞尔曲线的有趣之处更在于它的"皮筋效应" ...

  7. Android自定义动画专题一

    Android自定义动画 在目前的移动端产品中,不管是app还是网页一个好看酷炫的页面总是会第一时间吸引人的眼球,那么对于android开发人员来说,要想实现一个好看的页面必然需要掌握自定义控件以及自 ...

  8. android 文字动画显示,用粒子动画显示各种文字的 Android 自定义 View

    一.总述 ParticleTextView 是一个 Android 平台的自定义 view 组件,可以用彩色粒子组成指定的文字,并配合多种动画效果和配置属性,呈现出丰富的视觉效果. 二.使用 1. 引 ...

  9. android 图片跑马灯动画,【Android自定义View】- 文本跑马灯效果

    简介 有些时候,文字过长,或者有多条需要展示的文本时,我们需要将文本进行左右滚动,多条文本时,还得上下滚动以实现展示不同的文本内容.这时候就需要我们自定义view来实现文本跑马灯效果了. 效果图 jj ...

最新文章

  1. Volley框架学习
  2. django 上传文件夹_django文件上传
  3. UpdateProgress使用
  4. 矩阵的LU分解 c++
  5. Java的知识点9——this关键字
  6. python打开setting_Django自带日志 settings.py文件配置方法
  7. Docker 面临的安全隐患,我们该如何应对
  8. python 计量经济 35岁 工作_Python在计量经济与统计学中的应用
  9. python2.7开发环境搭建_windows python2.7 django 开发环境搭建
  10. 数据库的开发笔记-字典表
  11. Spring安全依赖查找
  12. Android CheckBox 实战
  13. ***检测(IDS)存在的问题及发展趋势
  14. 0x01-1 原码 反码 补码 概念 原理 详解
  15. 你绝对不知道的JS冷知识
  16. 冲激响应(impulse response)
  17. 智安网络丨德勤发布2021九大技术趋势,零信任安全成为主流
  18. 一个9年运维的经验之路
  19. jquery判断起止时间大小和非空
  20. 华为电脑用鸿蒙系统了吗,华为的鸿蒙系统可以用在电脑上吗?

热门文章

  1. 展讯8910DM:如果VBus和VBat接在一起,导致模组某些功能出现异常的问题分析
  2. i can sayABC(2006-7-13)
  3. Linux环境下编写C语言
  4. Could not transfer artifact ***maven-default-http-blocker Maven打包报错
  5. weka使用mysql数据_Weka访问MySql数据库
  6. 动态获取本地json文件,渲染为表格-前端html+css+javascript,nth-child选择器,实时浏览插件,vscode,ajax
  7. 看《攀登者》之前必刷的冒险电影,什么是登山精神?
  8. 【搜索+拆点】魔鬼之城
  9. CSS3有哪些新特性
  10. 鳗鱼刺多怎么处理图像_鳗鱼有刺吗?河鳗和海鳗的区别是什么?