这段时间一直在看自定义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);    }}

更多相关文章

  1. Android用GridLayout网格布局实现简单的计算器界面
  2. Android图文混排ImageSpan居中,以及设置间距问题
  3. Android(安卓)Bottom Sheet详解
  4. Android--Handler的使用方法:在子线程中更新界面
  5. Android之——史上最简单旋转菜单实现效果
  6. getView中经常出现position=0
  7. Android动画效果Animation之Tween实现简单动画
  8. AsyncTask 完全解析
  9. Android(安卓)通过listView+RadioButton实现列表的单选功能

随机推荐

  1. 双色球、选项卡、购物车实例
  2. Gird布局实战(圣杯布局)
  3. 0517作业
  4. Failed to start docker.service: Unit n
  5. ModStart-UEditor 开源,让 UEditor 重新焕
  6. Android(安卓)SQLiteHelper
  7. android BaseAdapter 自定义适配器 BaseA
  8. Android中的资源文件
  9. Android(安卓)7.0 SystemUI Recent浅析
  10. Android(安卓)文件存储及常见问题解决