1.写一个类,继承View
2.重写onDraw方法和onSizeChanged方法
3.代码如下:
private Paint paint1;
private Paint mPaint;
private int mViewWidth;
private LinearGradient mlinearGradient;
private int mTranslate;//水平方向上平移的距离
private Matrix gradientMatrix;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (gradientMatrix != null) {
mTranslate += mViewWidth / 5;
//每次刷新view平移一点,如果到头就重新返回在开始平移
if (mTranslate >2*mViewWidth){
mTranslate = -mViewWidth;
}
gradientMatrix.setTranslate(mTranslate,0);
mlinearGradient.setLocalMatrix(gradientMatrix);
postInvalidateDelayed(100);
}
}
@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();
mlinearGradient = new LinearGradient(0
, 0
, mViewWidth
, 0
, new int[]{Color.BLUE,0xffffffff,Color.BLUE}
, null
, Shader.TileMode.CLAMP);
}
mPaint.setShader(mlinearGradient);
gradientMatrix = new Matrix();
}
}
public void initPaint(){
paint1 = new Paint();
paint1.setColor(Color.BLUE);
paint1.setStyle(Paint.Style.FILL);
}
其中关键的一点是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个paint对象设置LinearGradient属性,在onDraw方法中,通过矩阵的方式来不断平移渐变效果,从而绘制文字是,产生动态效果。。这其中的一些类笔者也不经常用,先记下来,写程序这种东西多用几次就熟悉了。
然后在用的时候直接写进xml里边就行:
<com.demo.alldemos.diyviews.MyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
over…