趣文网 > 作文大全

Android自定义控件文字闪光移动效果

2020-12-02 07:25:01
相关推荐

由于要实现文字的闪光移动,自定义控件直接继承TextView。在文字上面绘制一个矩形框,矩形框和文件相交处显示矩形框的颜色,不断移动矩形框的位置,从而实现闪光不断移动的效果。

public class BlinkTextView extends TextView {……}

通常字符串并不会完全填充View,因此需要计算字符串实际所占区域位置,在onMeasure方法中计算绘制内容的实际区域。需要的绘制的前景闪光效果矩形框初始位置在字符串区域的左边,然后移动两倍的字符串宽度到右边。

在onDraw方法中实现绘制逻辑。采用PorterDuffXfermode(图像过度模式)实现字符串内容和前景闪光合成效果。这里需要用到PorterDuff.Mode.SRC_IN模式,在两者相交的地方绘制源图像,并且绘制的效果会受到目标图像对应地方透明度的影响。这里保持前景闪光矩形框的位置参数不变,通过设置canvas的位移矩阵从而实现矩形框的移动效果。

使用属性动画ValueAnimator来实现动画效果,每一帧输出一个位移值dx,调用invalidate()重新绘制View,dx值从0逐渐增加到两倍的字符串宽度。

在onWindowFocusChanged方法中开启或者取消动画播放。需要注意的是View的生命周期,View只有在Activity执行完onResume方法之后才会调用onMeasure(),在onResume方法中主动调用start()开启动画,此时字符串宽度值为0,会导致动画效果不显示。

另一种实现方式将动画周期调大一些会发现,左边的动画当闪光移动比较慢时,方式一实现的的前景矩形框和背景字符串过度比较突兀,这里我们用LinearGradient颜色梯度来实现右边带有颜色渐变的动画效果。

在onMeasure方法中,计算好字符串的实际位置后,新建一个LinearGradient对象,颜色渐变方式是左、中、右的位置分别对应字体的颜色、闪光的颜色、字体的颜色。

重写onDraw方法,设置linearGradient的位置矩阵matrix,dx是矩阵的左右位移。然后设置mPaint的着色器,这里的mPaint即当前绘制的TextView的Paint对象,可通过调用getPaint()获得。最后调用父方法绘制字符串。

LinearGradient的位移dx从0变化到两倍的字符串宽度距离。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

刷新自我作文600字初中 晒晒我们班的牛人作文600字 英语四级作文万能套用模板 龟兔赛跑新编400字作文 我学会了什么作文300字 我的心爱之物作文300字 三年级暑假作文300字 我想对你说作文300字 我的乐园作文200字 袁隆平作文600字 保护环境作文400字 妈妈的爱作文600字 我的理想作文800字 可爱的小白兔作文 中考满分作文大全 关于困难的作文 关于收获的作文 牡丹花的作文 关于文明的作文 让生活更美好作文 高考语文作文题目 踏青作文 怎样写作文 声音作文 作文素材大全 我和书的故事作文400字 我的好朋友200字作文 假如我是一棵树作文 歌声嘹亮作文 令我感动的一件事作文