Android 实现七彩闪动文字效果

未经本人授权,不得转载!否则必将维权到底

先上效果图:
图例1.png

这是 AndroidStudio 里面预览布局的效果图,真实运行效果,大家一试便知。

实现代码如下:

自定义View,继承TextView

/** * Created by keithXiaoY  */
// Java代码
public class CustomsTextView extends TextView { 
    private int mViewWidth = 0;
    private TextPaint mPaint;
    private LinearGradient mLinearGradient;
    private Matrix mGradientMatrix;
    private int mTranslate = 0;

    public CustomsTextView(Context context) {
        this(context,null,0);
    }
    public CustomsTextView(Context context, AttributeSet attrs) {    
        this(context, attrs ,0 );
    }
    public CustomsTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mGradientMatrix != null){
            mTranslate += mViewWidth /7 ;
            if (mTranslate > 2*mViewWidth){
                mTranslate = -mViewWidth;
            }
            mGradientMatrix.setTranslate(mTranslate ,0);
            mLinearGradient.setLocalMatrix(mGradientMatrix);
            postInvalidateDelayed(50);
        }
    }

@Override
    protected 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();
            //Shader.TileMode.MIRROR   镜子,反射,反映
            //Shader.TileMode.REPEAT  重复
                mLinearGradient = new LinearGradient(0,0,mViewWidth,0,new int[]{Color.RED,Color.GREEN,Color.CYAN,0xffffffff,Color.BLUE},null, Shader.TileMode.CLAMP);
                mPaint.setShader(mLinearGradient);
                mGradientMatrix = new Matrix();

             }
         }
     }
}
  • new int[]{Color.RED,Color.GREEN,Color.CYAN,0xffffffff,Color.BLUE} 这里面就是颜色的代码,你可以按照自己的喜好来调整int数组里面的颜色。

这里是充分利用Android中Paint对象的Shader渲染器,通过不断变化的LinearGradient,并使用带有该属性的Paint对象来绘制要显示的文字。

  • 在onSizeChanged()方法中进行一些对象的初始化,并根据View的宽带来设置一个LinearGradient渐变渲染器
  • 使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生TextView没有的LinearGradient属性
  • 在onDraw()方法中,通过矩阵的方式来不断平移渐变效果,实现效果

----引用 徐宜生《Android群英传》


不要给自己的人生设限

你可能感兴趣的:(Android 实现七彩闪动文字效果)