【Android(安卓)UI】自定义TextView实现动态的文字闪动效果
16lz
2021-01-25
这段时间一直在看自定义View感觉很有意思,今天刚刚看到了一个实现动态的文字闪动效果的自定义TextView,其原理是利用LinearGradient和Matrix来实现的,运行效果如下:
要想实现这一个效果,可以充分利用Android中Paint对象的Shader渲染器。通过设置一个不断变化的LinearGradient,并使用带有该属性的Paint对象来绘制要显示的文字。首先,在onSizeChanged()方法中进行一些对象的初始化工作,并根据View的宽带设置一个LinearGradient渐变渲染器,代码如下所示:
@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (mViewWidth == 0) { mViewWidth = getMeasuredWidth(); if (mViewWidth > 0) { mPaint = getPaint(); mLinearGradient = new LinearGradient( 0, 0, mViewWidth, 0, new int[]{ Color.BLUE, 0xffffffff, Color.BLUE}, null, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); mGradientMatrix = new Matrix(); } }}
其中最关键的就是使用getPaint()方法获取当前绘制的TextView的Paint对象,并给这个Paint对象设置原生TextView没有的LinearGradient属性。最后,在onDraw()方法中,通过矩阵的方式不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果,代码如下:
@Overrideprotected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mGradientMatrix != null) { mTranslate += mViewWidth / 5; if (mTranslate > 2 * mViewWidth) { mTranslate = -mViewWidth; } mGradientMatrix.setTranslate(mTranslate, 0); mLinearGradient.setLocalMatrix(mGradientMatrix); postInvalidateDelayed(100); }}
更多相关文章
- Android用GridLayout网格布局实现简单的计算器界面
- Android图文混排ImageSpan居中,以及设置间距问题
- Android(安卓)Bottom Sheet详解
- Android--Handler的使用方法:在子线程中更新界面
- Android之——史上最简单旋转菜单实现效果
- getView中经常出现position=0
- Android动画效果Animation之Tween实现简单动画
- AsyncTask 完全解析
- Android(安卓)通过listView+RadioButton实现列表的单选功能