/*** 绘制弧形* @param oval 绘制区域* @param startAngle 开始绘制的角度* @param sweepAngle 结束绘制的角度* @param useCenter 是否使用中心* @param paint 画笔*/ public void drawArc(RectF oval, float startAngle, float sweepAngle,boolean useCenter, Paint paint)其中前三个参数都比较好理解,关键是第三个参数useCenter,看张图你就明白了

可以发现当useCenter=true时,弧形的区域是开始角度的点和结束角度的点和中心点连接起来的区域;而useCenter=false时,弧形区域是开始角度的点和结束角度的点直接连接起来的区域。
绘制路径
mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(3);Path path = new Path();path.moveTo(5, 10);path.lineTo(120, 30);path.lineTo(44, 66);path.lineTo(77, 231);canvas.drawPath(path, mPaint);

绘制路径比较简单,依次添加相应的坐标点即可,注意设置画笔的抗锯齿和Style即可。
- 绘制文字路径
mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(3);Path path = new Path();path.moveTo(50, 50);path.lineTo(200, 250);path.lineTo(300, 450);path.lineTo(300, 650);mPaint.setTextSize(46);canvas.drawTextOnPath("Hi_xiaoyu_bolg_in_android", path, 0, 0, mPaint);

这个和绘制路径一样,注意设置大小,画笔粗细即可。
/*** 画圆* @param cx圆心X坐标* @param cy圆心Y坐标* @param radius 圆的半径* @param paint */ public void drawCircle(float cx, float cy, float radius, Paint paint) { } // 画圆canvas.drawCircle(50, 50, 50, mPaint);RectF r = new RectF(150, 0, 270, 110);// 画矩形canvas.drawRect(r, mPaint);RectF oval = new RectF(0, 120, 50, 270);// 画椭圆canvas.drawOval(oval, mPaint);RectF rect = new RectF(100, 120, 170, 200);// 画圆角矩形canvas.drawRoundRect(rect, 30, 20, mPaint);// 画线canvas.drawLine(200, 120, 300, 300, mPaint);
其他的drawXxx方法这里就不再赘述,大家可以一一去尝试。
这里再来看下canvas中几个比较重要的方法:
canvas.save();canvas.restore();canvas.translate(dx, dy);canvas.rotate(degrees);canvas.saveLayer(bounds, paint, saveFlags);save():把当前的绘制的图像保存起来,让后续的操作相当于是在一个新的图层上的操作。
paint.setColor(0xff00ccff);paint.setAntiAlias(true);paint.setStyle(Style.STROKE);canvas.translate(canvas.getWidth() / 2, 200); // 将位置移动画纸的坐标点,不用每次都从坐标原点计算canvas.drawCircle(0, 0, 100, paint); Paint tmpPaint = new Paint(paint); tmpPaint.setStrokeWidth(1);float y = 100;int count = 60; // 总刻度数for (int i = 0; i < count; i++) { if (i % 5 == 0) {canvas.drawLine(0f, y, 0, y + 12f, paint);canvas.drawText(String.valueOf(i / 5 + 1), -4f, y + 25f,tmpPaint); } else {canvas.drawLine(0f, y, 0f, y + 5f, tmpPaint); } canvas.rotate(360 / count, 0f, 0f); // 旋转画纸}// 绘制指针paint.setStrokeWidth(2);canvas.drawLine(0, 10, 0, -65, paint);paint.setStrokeWidth(4);canvas.drawLine(0, 10, 20, -35, paint);
以上就是Android开发中的UI效果设计模块的第二部分内容,之后还会继续更新,希望对大家的学习有所帮助。