首先,需要先继承Textview
public class LinearGradientView extends TextView{*
publicLinearGradientView(Contextcontext) {*
super(context);
}
publicLinearGradientView(Contextcontext,AttributeSetattrs) {
super(context,attrs);
}
publicLinearGradientView(Contextcontext,AttributeSetattrs,intdefStyleAttr) {
super(context,attrs,defStyleAttr);
}
}
然后重写onSizeChanged(intw,inth,intoldw,intoldh),这个方法会在view的大小改变之时重新调用
protected voidonSizeChanged(intw,inth,intoldw,intoldh) {
super.onSizeChanged(w,h,oldw,oldh);
//设置一个线性渲染器
//参数1 渲染的起始x坐标 参数2 渲染的起始y坐标
// 参数3 渲染的结束x坐标 参数4 渲染的结束y坐标
//参数5 渲染颜色 大于2钟 参数7 渲染的模式
mLinearGradient= newLinearGradient(0,0,getMeasuredWidth(),0,new int[] {Color.BLUE,Color.WHITE,Color.RED},
null,Shader.TileMode.REPEAT);
//得到画笔,设置渲染器
getPaint().setShader(mLinearGradient);
mGradientMatrix= newMatrix();
}
最后重写 onDraw(Canvascanvas)***
protected voidonDraw(Canvascanvas) {
super.onDraw(canvas);
if(mGradientMatrix!=null)
{
//设置平移的距离
mTranslate+=getMeasuredWidth()/5;
//判断是否越界
if(mTranslate>=2*getMeasuredWidth()) {
//设置起点
mTranslate= -getMeasuredWidth() ;
}
//设置移动的距离
mGradientMatrix.setTranslate(mTranslate,0);
//渲染器加载matrix
mLinearGradient.setLocalMatrix(mGradientMatrix);
postInvalidateDelayed(100);//延迟100ms后重绘
}
}