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),运行就是这样的效果了。