Рисование треугольника с использованием координат из разных видов - PullRequest
0 голосов
/ 10 июля 2019

Идея, приведенная ниже, проиллюстрирована на изображении ниже:

XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@android:color/black">

    <TextureView
            android:id="@+id/background"
            android:layout_width="match_parent"
            android:layout_height="match_parent" app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" android:layout_marginTop="4dp" android:visibility="gone"/>

    <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/bigController"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            android:animateLayoutChanges="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideLineForBottomContainer"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintGuide_percent="0.35"/>

        <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/bottomController"
                android:layout_width="225dp"
                android:layout_height="235dp"
                android:background="@drawable/round_rectangle_background"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="@+id/guideLineForBottomContainer">

            <TextView
                    android:id="@+id/infoLabel"
                    style="@style/GeneralText"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:textAlignment="center"
                    android:text="@string/car_side_recognition_label"
                    android:textStyle="bold"
                    android:textAllCaps="true"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:layout_marginTop="4dp"/>

            <ImageView
                    android:id="@+id/bigLogo"
                    android:layout_width="35dp"
                    android:layout_height="70dp"
                    android:src="@drawable/ic_dtc_vehicle"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/infoLabel" android:visibility="visible"/>

            <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/Left"
                    android:layout_width="45dp"
                    android:layout_height="45dp"
                    android:background="@drawable/gray_circle"
                    app:civ_border_width="1dp"
                    android:alpha="1"
                    android:tag="Left"
                    app:civ_border_color="@color/gray_dark"
                    app:layout_constraintEnd_toStartOf="@+id/carSideModeVehicle"
                    app:layout_constraintStart_toStartOf="@+id/FrontLeft" android:layout_marginTop="32dp"
                    app:layout_constraintTop_toBottomOf="@+id/FrontLeft"/>

            <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/FrontLeft"
                    android:layout_width="45dp"
                    android:layout_height="45dp"
                    android:background="@drawable/gray_circle"
                    app:civ_border_width="1dp"
                    android:alpha="1"
                    android:tag="FrontLeft"
                    app:civ_border_color="@color/gray_dark"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toStartOf="@+id/bigLogo"
                    app:layout_constraintHorizontal_bias="0.48"
                    tools:layout_editor_absoluteY="34dp"/>

        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Что я хочу сделать, это получить точные координаты FrontLeft просмотреть и получить точные координаты нижнего левого угла + координаты верхнего левого угла bigLogo и передать их функции, чтобы нарисовать мне треугольник.Я создал функцию для рисования, и она работает нормально, но я не могу получить точные координаты для прохождения.

Мое решение:

    val coordinates = ArrayList<Float>()

    val frontLeftRect = Rect()
    val centerRect = Rect()

    FrontLeft.getLocalVisibleRect(frontLeftRect)
    bigLogo.getLocalVisibleRect(centerRect)


    with (coordinates) {
        add(frontLeftRect.right.toFloat())
        add(frontLeftRect.right.toFloat())

        add(centerRect.top.toFloat())
        add(centerRect.top.toFloat())

        add(centerRect.bottom.toFloat())
        add(centerRect.bottom.toFloat())
    }

    drawTriangle(
        coordinates,
        "xxx"
    )

Это возвращает неправильные координаты.

Если я использую getGlobalVisibleRect / getLocalVisibleRect, то ничего не видно (вид создается и добавляется, но не виден человеческому глазу).Я предполагаю, что координаты отклонены настолько, что их невозможно увидеть, потому что раньше мне удавалось нарисовать некрасивый треугольник (другой подход).Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...