Android自定义View之实现一个动态的文字闪动效果

Android给我们提供了丰富的组件库来创建丰富的UI效果,同时也提供了非常方便的拓展方法。通过继承Android的系统组件,我们可以非常方便的拓展现有功能,在系统组件的基础上创建新的功能,甚至可以直接自定义一个控件,实现Android系统控件所没有的功能。适当地使用自定义View,可以丰富应用程序的体验效果。

下面通过利用LinearGradient Shader和Matrix来实现一个动态的文字闪动效果,程序运行效果如下图所示:

Android自定义View之实现一个动态的文字闪动效果_第1张图片

要想实现这个效果,可以充分利用Android中对Paint对象的Shader渲染器。通过设置一个不断变化的LinearGradient,并使用带有该属性的Paint对象来绘制要显示的文字。首先在onSizeChanged()方法中进行一些对象的初始化工作,并根据View的宽高设置一个LinearGradient渐变渲染器,代码如下所示:

  @Override
    protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
        super.onSizeChanged(width, height, oldWidth, oldHeight);
        if (mViewWidth == 0) {
            mViewWidth = getMeasuredWidth();
            if (mViewWidth > 0) {
                mPaint = getPaint();
                mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{
                        Color.BLUE, 0xffffffff,
                        Color.RED
                }, null, Shader.TileMode.CLAMP);
                mPaint.setShader(mLinearGradient);
                mGradientMatrix = new Matrix();
            }
        }
    }
其中最关键的是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生的TextView没有的LinearGradient属性。最后,在onDraw()方法中,通过矩阵的方式不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果,代码如下所示:

  @Override
    protected 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);
        }
    }
Demo源代码下载地址:http://download.csdn.net/detail/lfeng1205/9609944

你可能感兴趣的:(Android开发)