1 首先自定义一个多背景的textview
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.widget.TextView; /** * 作者:水东流 * 时间:2016/4/20 * 带框文字效果textview */ public class MyTextView extends TextView { private Paint mpaint1;//画笔1 private Paint mpaint2;//画笔2 public MyTextView(Context context) { this(context, null); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mpaint1 = new Paint(); mpaint2 = new Paint(); mpaint1.setColor(getResources().getColor(android.R.color.holo_blue_light)); mpaint2.setColor(Color.WHITE);//背景色 mpaint1.setStyle(Paint.Style.FILL); mpaint2.setStyle(Paint.Style.FILL); } /** * 绘图 * * @param canvas */ @Override protected void onDraw(Canvas canvas) { //绘制外层矩形 canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mpaint1); //绘制内侧矩形 canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, mpaint2); canvas.save(); //绘制文字前平移10像素 canvas.translate(10, 0); //父类的方法,绘制文本 super.onDraw(canvas); canvas.restore(); }一般拓展是在onDraw方法中对原生控件行为进行拓展
2 下面是带闪动的多背景textview,这里就直接继承上面的多背景textview了
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Shader; import android.util.AttributeSet; /** * 作者:水东流 * 时间:2016/4/20 * 闪动效果 */ public class MyMoveView extends MyTextView { private int mViewWidth = 0;//宽度 private Paint mpaint; private LinearGradient mLinearGradient; private Matrix mGradientMatrix; private int mTanslate; public MyMoveView(Context context) { super(context); } public MyMoveView(Context context, AttributeSet attrs) { super(context, attrs); } public MyMoveView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * 在此初始化闪动所需值 * @param w * @param h * @param oldw * @param oldh */ @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,0xfffffff,Color.BLUE},null, Shader.TileMode.CLAMP); mpaint.setShader(mLinearGradient); mGradientMatrix=new Matrix(); } } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(mGradientMatrix!=null){ mTanslate+=mViewWidth; if(mTanslate>2*mViewWidth){ mTanslate=-mViewWidth; } mGradientMatrix.setTranslate(mTanslate,0); mLinearGradient.setLocalMatrix(mGradientMatrix); postInvalidateDelayed(100); } } }这里在onDraw方法里面,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果