Android 实现七彩闪动文字效果

2016-06-29  本文已影响2165人  程序员K哥

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

先上效果图:
图例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();

             }
         }
     }
}

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

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


不要给自己的人生设限
上一篇下一篇

猜你喜欢

热点阅读