最近新买一款Nexus 6 手机,看着手机上原生的Android 界面,一种说不出的感觉!这可能就是对谷歌的信仰!
setStrokeWidth()是Paint中的一个方法,自定义View的时候经常用到
/**
* Set the width for stroking. 设置描边的宽度(也就是控制画笔的粗细)
* Pass 0 to stroke in hairline mode.
*/
public void setStrokeWidth(float width) {
nSetStrokeWidth(mNativePaint, width); //native 方法
}
举个例子,首先自定义一个View,在onDraw()方法中添加如下方法:
Paint rectPaint = new Paint();
rectPaint.setStyle(Paint.Style.STROKE);
RectF rect0 = new RectF(100, 100, 700, 700);
canvas.drawRect(rect0, rectPaint);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(80);
paint.setStyle(Paint.Style.STROKE);
canvas.drawArc(rect0, 0, 90, false, paint);
我的本意是在这个矩形形成一个内切圆弧的但是结果如下:
可以看出一旦要是设置的strokeWidth足够大的情况下,就会有一半在外边了。那要想形成内切弧线就应该对矩形做改变才行。我们把RectF(100, 100, 700, 700) 换成 RectF(140,140,660,660)再次进行尝试。为了和 上图作比较,我在上面的代码上接着添加如下代码:
RectF rect1 = new RectF(140, 140, 660, 660);
Paint paint2 = new Paint();
paint2.setColor(Color.BLUE);
paint2.setStyle(Paint.Style.STROKE);
paint2.setStrokeWidth(80);
canvas.drawArc(rect1, 0, -90, false, paint2);
效果图如下:
这个时候蓝色圆弧正好为内切弧。
那么可总结为这样:
如果一个矩行要想内切圆写代码的时候只需要在原来的矩行上 left top 各加上strokeWidth的一半, right bottom各减去 strokeWidth的一半即可。
在做比较复杂的自定义View的时候,特别是那种复杂图形之间间距要求比较严谨的情况,一定要充分考虑这方面的问题。