Android 画布canvas clipRect(Rect rect)

clipOutRect(Rect rect)
Set the clip to the difference of the current clip and the specified rectangle, which is expressed in local coordinates.

Canvas 中clipOutRect(Rect rect)方法,是对画布按照rect进行裁剪的意思。参数rect是矩形,告诉rect左上角点和右下角点,就可以确定一个矩形。该方法的返回值是布尔类型,裁剪结果不为空返回true。

如何使用:

①显示下面这张图片中心的位置100 * 100图片

关键代码:

canvas?.clipRect(rect)

完整代码:

package com.lxm.apipro.canvas.d2

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View

class CanvasView : View {
    private var mContext: Context? = null
    private  var mBitmap: Bitmap = BitmapFactory.decodeResource(resources, com.lxm.apipro.R.drawable.pic1)
    private var mPaint: Paint? = null
    constructor(context: Context?) : this(context, null)
    constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        mContext = context
        mPaint = Paint()
        mPaint?.isAntiAlias = true

    }


    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.save()
        var picWith = mBitmap.width
        var picHeight = mBitmap.height
        var centerX = picWith / 2
        var centerY = picHeight / 2
        var rect = Rect(centerX - 100,centerY - 100,centerX + 100,centerY + 100)

        canvas?.clipRect(rect)
        canvas?.drawBitmap(mBitmap,0f,0f,null)
        canvas?.restore()

    }

}

效果:

未加关键代码  canvas?.clipRect(rect) 效果图:

添加关键代码  canvas?.clipRect(rect) 效果图:

为什么加了canvas?.clipRect(rect) 效果图是这样呢?

是因为canvas?.clipRect(rect)方法里面默认的Region.Op.INTERSECT。

Region.Op.INTERSECT:是A和B交集的形状

Region.Op.DIFFERENCE :是A形状中不同于B的部分显示出来

如果要详细了解可以参考这篇博客:https://blog.csdn.net/eyishion/article/details/53728913

②还是上面的例子,我们要实现下面这样的效果,要怎么实现呢?

只要把上面的canvas?.clipRect(rect)替换成canvas?.clipRect(rect,Region.Op.DIFFERENCE),运行就是这样的效果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值