本文主要是介绍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.d2import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.Viewclass CanvasView : View {private var mContext: Context? = nullprivate var mBitmap: Bitmap = BitmapFactory.decodeResource(resources, com.lxm.apipro.R.drawable.pic1)private var mPaint: Paint? = nullconstructor(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 = contextmPaint = Paint()mPaint?.isAntiAlias = true}override fun onDraw(canvas: Canvas?) {super.onDraw(canvas)canvas?.save()var picWith = mBitmap.widthvar picHeight = mBitmap.heightvar centerX = picWith / 2var centerY = picHeight / 2var 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),运行就是这样的效果了。
这篇关于Android 画布canvas clipRect(Rect rect)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!