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个单位。这样画出来的自定义控件为:
这个例子,非常简单,可能大家对继承原生控件还是意犹未尽的话,我们百尺竿头更进一步。做个稍微复杂点自定义TextView——带有闪烁文字的TextView。
我们分析一下实现的思路:
①要实现这个效果,我们可以充分利用paint对象的shader(渲染器)对象。
②通过不断改变linearGradient的位置,来形成这闪烁的效果。
有了这样的思路以后,我们首先在onSizeChanged方法初始化LinearGradient对象,和进行图形变换的矩阵对象。源代码如下:
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对象颜色设置为灰绿相间的线性渐变对象,颜色的平铺模式为平铺。
然后在onDraw方法中,不断变换线性渐变对象的位置,从而就有了文字左右闪烁的效果。源代码如下:










