当给定尺寸比时,在预览视图中绘制圆是不准确的

px9o7tmv  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(323)

我想在上面画个圈 previewViewsetOnTouchListener 如下所示

val shape = GradientDrawable()
            shape.shape = GradientDrawable.OVAL
            shape.setColor(Color.TRANSPARENT)
            shape.setStroke(5, Color.WHITE)

        var circleSize = 200

        var img: ImageView = ImageView(this)
            img.background = shape
            val params = FrameLayout.LayoutParams(circleSize, circleSize)
            params.leftMargin = (event.x - (circleSize / 2)).toInt()
            params.topMargin = (event.y - (circleSize / 2)).toInt()
            idFocusIndicator.removeAllViews()
            idFocusIndicator.addView(img, params)

这是我的 PreviewView ```
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"

--->app:layout_constraintDimensionRatio="" // 3:4, 9:16, 1:1 etc

    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

当我点击查看时 `constraintDimensionRatio` 空白,即 `""` . 无论我在何处点击视图,一个圆圆将恰好出现在该点作为一个中心。
但是什么时候 `constraintDimensionRatio` 给定了“3:4”、“1:1”等值。圆圈被画得离我点击视图的地方有点远。不同的尺寸比,其与实际位置的距离也不同。
看我点击的位置,当比率为 `"3:4"` 当比率为 `""` ![](https://i.stack.imgur.com/O36rW.jpg)
如何解决这个问题?
编辑:
我发现是因为 `FrameLayout` 硬编码为 `match_parent` 约束值它的行为是这样的。所以,如果我创造一个 `FrameLayout` 并添加 `ImageView` 再加上 `FrameLayout` 作为孩子 `parent layout` 会解决问题的。但我不知道怎么做!有什么帮助吗?
yeotifhr

yeotifhr1#

没有人回答我的问题,所以,我只回答
我通过改变约束来解决这个问题 PreviewView . 但是,花了将近一天的时间才弄明白。它可能会帮助犯同样错误的人。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/idFocusIndicator"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/transparent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="3:4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

相关问题