
我们来分析一下如何实现这样的效果。我们此时应当盯上OnDraw方法,重写OnDraw方法,在OnDraw方法中分别画两个有带颜色背景矩形边框就可以了。这样,文本框就会有错落有致的层次感了。
要有这种错落有致的效果,我们第一步要做的是定义画内边框和外边框的画笔,定义的代码如下:
private void initView() {mPaint1 = new Paint();mPaint1.setColor(Color.BLUE);mPaint1.setStyle(Style.FILL);mPaint2 = new Paint();mPaint2.setColor(Color.YELLOW);mPaint2.setStyle(Style.FILL);} 我们定义了第一种画笔颜色为蓝色,画笔的填充模式为完全填充。第二种画笔颜色为黄色,同样填充模式为完全填充。canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint1);canvas.drawRect(10, 10, getMeasuredWidth() - 10,getMeasuredHeight() - 10, mPaint2);canvas.save();canvas.translate(10, 0);super.onDraw(canvas);canvas.restore();我们画了两个长宽不等的矩形,并且画布平移了10个单位。这样画出来的自定义控件为:

if (mWidth == 0) {mWidth = getMeasuredWidth();if (mWidth > 0) {mPaint = getPaint();mLinearGradient = new LinearGradient(0, 0, mWidth, 0,new int[] { Color.GRAY, Color.GREEN, Color.GRAY }, null,Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);matrix = new Matrix();}} 我们将LinearGradient对象颜色设置为灰绿相间的线性渐变对象,颜色的平铺模式为平铺。if (matrix != null) {mTranslate = mTranslate + mWidth / 5;if (mTranslate > 2 * mWidth) {mTranslate = -mWidth;}matrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(matrix);postInvalidateDelayed(100);} 最终形成的效果为:
这就是自定义View三板斧之一——继承现有控件一点总结,希望对大家的学习有所帮助。