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);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。