Android画布Canvas裁剪区域clipRect,Kotlin
只需要把clipRect放在Android系统的super.onDraw之前,就只绘制"剪切"出来的区域。意图很简单,只绘制中心区域宽高为800,600的那一小块:
Kotlin
class MyImageView : AppCompatImageView {
private var mSrcBmp: Bitmap? = null
private val mSizeF = SizeF(800f, 600f)
constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {
//mSrcBmp是原始图大小,没有缩放和拉伸的。
mSrcBmp = (drawable as BitmapDrawable).bitmap
}
override fun onDraw(canvas: Canvas) {
val cx = this.width / 2
val cy = this.height / 2
val srcRectF = RectF(cx - mSizeF.width / 2, cy - mSizeF.height / 2, cx + mSizeF.width / 2, cy + mSizeF.height / 2)
canvas.clipRect(srcRectF)
super.onDraw(canvas)
}
}
如果不做特殊位置调整,把绘制裁剪绘制代码常规的放在super.onDraw之后:
Kotlin
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val cx = this.width / 2
val cy = this.height / 2
val srcRectF = RectF(cx - mSizeF.width / 2, cy - mSizeF.height / 2, cx + mSizeF.width / 2, cy + mSizeF.height / 2)
canvas.clipRect(srcRectF)
}
则,
没有"裁剪"效果。