修改名称。
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package com.xscm.modulemain
|
||||
|
||||
import android.graphics.*
|
||||
import android.graphics.drawable.Drawable
|
||||
|
||||
/**
|
||||
* 这是设置图片设置拉伸区域
|
||||
*/
|
||||
class FakeNinePatchDrawable(
|
||||
private val bitmap: Bitmap,
|
||||
// 定义拉伸区域的坐标(相对图片的百分比,范围 0~1)
|
||||
private val left: Float, // 左边界(左侧不拉伸区域的宽度比例)
|
||||
private val top: Float, // 上边界(上侧不拉伸区域的高度比例)
|
||||
private val right: Float, // 右边界(右侧不拉伸区域的宽度比例)
|
||||
private val bottom: Float // 下边界(下侧不拉伸区域的高度比例)
|
||||
) : Drawable() {
|
||||
|
||||
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||||
private val rect = Rect() // 绘制区域
|
||||
|
||||
override fun draw(canvas: Canvas) {
|
||||
val bounds = bounds // 视图的实际尺寸(需要填充的区域)
|
||||
val w = bitmap.width
|
||||
val h = bitmap.height
|
||||
|
||||
// 计算分割点(像素值)
|
||||
val splitLeft = (w * left).toInt()
|
||||
val splitTop = (h * top).toInt()
|
||||
val splitRight = (w * right).toInt()
|
||||
val splitBottom = (h * bottom).toInt()
|
||||
|
||||
// 1. 绘制四个角(不拉伸)
|
||||
// 左上
|
||||
rect.set(0, 0, splitLeft, splitTop)
|
||||
canvas.drawBitmap(bitmap, Rect(0, 0, splitLeft, splitTop), rect, paint)
|
||||
// 右上
|
||||
rect.set(bounds.width() - (w - splitRight), 0, bounds.width(), splitTop)
|
||||
canvas.drawBitmap(bitmap, Rect(splitRight, 0, w, splitTop), rect, paint)
|
||||
// 左下
|
||||
rect.set(0, bounds.height() - (h - splitBottom), splitLeft, bounds.height())
|
||||
canvas.drawBitmap(bitmap, Rect(0, splitBottom, splitLeft, h), rect, paint)
|
||||
// 右下
|
||||
rect.set(
|
||||
bounds.width() - (w - splitRight),
|
||||
bounds.height() - (h - splitBottom),
|
||||
bounds.width(),
|
||||
bounds.height()
|
||||
)
|
||||
canvas.drawBitmap(bitmap, Rect(splitRight, splitBottom, w, h), rect, paint)
|
||||
|
||||
// 2. 绘制四条边(单向拉伸)
|
||||
// 上边(水平拉伸)
|
||||
rect.set(splitLeft, 0, bounds.width() - (w - splitRight), splitTop)
|
||||
canvas.drawBitmap(bitmap, Rect(splitLeft, 0, splitRight, splitTop), rect, paint)
|
||||
// 下边(水平拉伸)
|
||||
rect.set(
|
||||
splitLeft,
|
||||
bounds.height() - (h - splitBottom),
|
||||
bounds.width() - (w - splitRight),
|
||||
bounds.height()
|
||||
)
|
||||
canvas.drawBitmap(bitmap, Rect(splitLeft, splitBottom, splitRight, h), rect, paint)
|
||||
// 左边(垂直拉伸)
|
||||
rect.set(0, splitTop, splitLeft, bounds.height() - (h - splitBottom))
|
||||
canvas.drawBitmap(bitmap, Rect(0, splitTop, splitLeft, splitBottom), rect, paint)
|
||||
// 右边(垂直拉伸)
|
||||
rect.set(
|
||||
bounds.width() - (w - splitRight),
|
||||
splitTop,
|
||||
bounds.width(),
|
||||
bounds.height() - (h - splitBottom)
|
||||
)
|
||||
canvas.drawBitmap(bitmap, Rect(splitRight, splitTop, w, splitBottom), rect, paint)
|
||||
|
||||
// 3. 绘制中间区域(双向拉伸)
|
||||
rect.set(
|
||||
splitLeft,
|
||||
splitTop,
|
||||
bounds.width() - (w - splitRight),
|
||||
bounds.height() - (h - splitBottom)
|
||||
)
|
||||
canvas.drawBitmap(bitmap, Rect(splitLeft, splitTop, splitRight, splitBottom), rect, paint)
|
||||
}
|
||||
|
||||
override fun setAlpha(alpha: Int) {
|
||||
paint.alpha = alpha
|
||||
invalidateSelf()
|
||||
}
|
||||
|
||||
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
|
||||
override fun getAlpha(): Int = paint.alpha
|
||||
override fun setColorFilter(colorFilter: ColorFilter?) {
|
||||
paint.colorFilter = colorFilter
|
||||
invalidateSelf()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user