@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
try {
int layer = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
drawable.setBounds(0, 0, getWidth(), getHeight());
drawable.draw(canvas);
//切割
if (shape == null || shape.isRecycled()) {
shape = getShape(getWidth(), getHeight());
}
canvas.drawBitmap(shape, 0, 0, slipPaint);
//画圆环
Paint ringPaint = new Paint();
ringPaint.setAntiAlias(true);
ringPaint.setStyle(Paint.Style.STROKE);
ringPaint.setColor(borderColor);
ringPaint.setStrokeWidth(borderWidth);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, (getWidth() - borderWidth) / 2, ringPaint);
//画透明格子
if (isNewMask) {
mask = getMask(getWidth(), getHeight());
isNewMask = false;
}
canvas.drawBitmap(mask, 0, 0, maskPaint);
//画文字
String text = progress + "%";
Rect textRect = new Rect();
textPaint.getTextBounds(text, 0, text.length(), textRect);
canvas.drawText(text, (getWidth() - textRect.width()) / 2, (getHeight() + textRect.height()) / 2, textPaint);
canvas.restoreToCount(layer);
} catch (Exception e) {
e.printStackTrace();
}
}
这个是在一个Imageview的自定义View中,onDraw方法中
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}首先获得这个imageview的drawble对象,这个对象,相当于图片
try {
int layer = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);canvas.restoreToCount(layer);
这个是创建一个层,这个层,在最后面也会使用,恢复,如果把这两行代码去掉,就会有黑色的底框
canvas.restoreToCount(layer);
drawable.setBounds(0, 0, getWidth(), getHeight());
drawable.draw(canvas);
在这个drawBle上面铺一层画布,在这上面画。
接下来:
if (shape == null || shape.isRecycled()) {
shape = getShape(getWidth(), getHeight());
}
canvas.drawBitmap(shape, 0, 0, slipPaint);
画布上面,是可以画东西是,是根据bitmap的内容和画笔
原文链接:http://www.apkbus.com/blog-865677-63499.html
打开App,阅读手记