Android Shader应用开发之霓虹闪烁文字效果
本文实例为大家分享了Android霓虹闪烁文字效果的具体代码,供大家参考,具体内容如下
packagecom.example.apple.shaderdemo; importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.LinearGradient; importandroid.graphics.Matrix; importandroid.graphics.Shader; importandroid.support.annotation.Nullable; importandroid.text.TextPaint; importandroid.util.AttributeSet; importandroid.widget.TextView; /** *Createdbyappleon2017/5/10. */ publicclassLinearGradientTextViewextendsTextView{ privateTextPaintmPaint; privateLinearGradientmLinearGradient; privateMatrixmMatrix; privatefloatmTranslate; privatefloatDELTAX=20; privateintmGradientSize; publicLinearGradientTextView(Contextcontext){ super(context); } publicLinearGradientTextView(Contextcontext,@NullableAttributeSetattrs){ super(context,attrs); } /** *优先于onDraw执行,在这里得到系统绘制TextView的画笔,然后给这个画笔设置shader *这样下面在执行onDraw的时候,使用的就是带有Shader效果的画笔了 *@paramw *@paramh *@paramoldw *@paramoldh */ @Override protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){ super.onSizeChanged(w,h,oldw,oldh); //★拿到系统TextView的画笔 mPaint=getPaint(); //得到文本 Stringtext=getText().toString(); //用画笔测量文本的长度 floattextWith=mPaint.measureText(text); //3个文字的宽度 mGradientSize=(int)(textWith/text.length()*3); //从左边-gradientSize开始,即左边距离文字gradientSize开始渐变 //一个渐变单位是:从第一个字之前3字距离开始到第一个字之前位置终结 //然后一直让这个渐变单位从左往右移动dx位移,直到最右侧后,向左移动 //CLAMP意思是:由于你的只是在渐变3个字的长度,那么剩余的空间,让边缘颜色去填充 mLinearGradient=newLinearGradient(-mGradientSize,0,0,0,newint[]{ 0xffff0000,0xff00ff00,0xff00ffff},null,Shader.TileMode.CLAMP ); mPaint.setShader(mLinearGradient); } @Override protectedvoidonDraw(Canvascanvas){ //调用super,意思是按照系统绘制textview的流程先把textview绘制完成 super.onDraw(canvas); //我在系统基础上再绘制一些效果 mTranslate+=DELTAX; floattextWidth=getPaint().measureText(getText().toString()); //到了边界dx取反 if(mTranslate>textWidth+mGradientSize||mTranslate<0){ DELTAX=-DELTAX; } //不停地方平移,得到闪烁的效果 mMatrix=newMatrix(); mMatrix.setTranslate(mTranslate,0); mLinearGradient.setLocalMatrix(mMatrix); //延时重绘 postInvalidateDelayed(50); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。