将参考网格放置在所有ImageView上

问题描述 投票:0回答:1

我的应用程序在

ImageView
中有一个
LinearLayout
。目前,它会将照片放置在
ImageView
中,通过设置
AspectRatio
保留照片的
ScaleType.CENTER_INSIDE
。正确地,这会导致显示的背景颜色矩形位于照片的上方或下方(或左侧或右侧)。

现在,我想在整个

ImageView
区域(即照片加上两个背景矩形)上放置一个参考网格。问题是确定整个 ImageArea 的
width
height
来构建将占据
ImageView
的网格位图。我可以构建一个 1000 x 1000 位图网格并将其放置在带有
ImageView
ScaleType.FIT_XY
中,但是在将照片添加到该方形位图时我无法保留照片的
AspectRatio

理想情况下,我想在现有照片上写一个适当缩放的网格。

android imageview
1个回答
0
投票

创建一个自定义 Drawable 来绘制网格并将其覆盖在 ImageView 上。这允许网格随着 ImageView 精确缩放。

以下是定义和应用此叠加层的方法:

class GridOverlayDrawable(private val cellSize: Float, private val color: Int) : Drawable() {
    private val paint = Paint().apply {
        color = [email protected]
        strokeWidth = 2f
    }

    override fun draw(canvas: Canvas) {
        val width = bounds.width()
        val height = bounds.height()

        for (x in 0..width step cellSize.toInt()) {
            canvas.drawLine(x.toFloat(), 0f, x.toFloat(), height.toFloat(), paint)
        }
        for (y in 0..height step cellSize.toInt()) {
            canvas.drawLine(0f, y.toFloat(), width.toFloat(), y.toFloat(), paint)
        }
    }

    override fun setAlpha(alpha: Int) { paint.alpha = alpha }
    override fun setColorFilter(colorFilter: ColorFilter?) { paint.colorFilter = colorFilter }
    override fun getOpacity() = PixelFormat.TRANSLUCENT
}

然后,将此可绘制对象设置为 ImageView 上的叠加层:

val gridOverlay = GridOverlayDrawable(cellSize = 20f, color = Color.LTGRAY)
imageView.overlay.add(gridOverlay)

如果 ImageView 尺寸与图像不完全匹配,请调整单元格大小或使用矩阵变换以确保网格与缩放后的图像对齐。

© www.soinside.com 2019 - 2024. All rights reserved.