继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

关于蒙版效果的解析

明月笑刀无情
关注TA
已关注
手记 104
粉丝 17
获赞 57
@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,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP