为了账号安全,请及时绑定邮箱和手机立即绑定

关于蒙版效果的解析

标签:
Android
@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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消