Как я могу получить угловые точки обзора в android? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть LinearLayout в моем макете, как показано на диаграмме ниже с синим фоном. Как я могу получить координаты угловых положений? Или как я могу установить их для указания c позиций? Например, я хочу, чтобы верхний левый угол был в (50,50), верхний правый угол был в (300 , 50), нижний левый угол (50,200) и нижний правый угол (300,50), как показано на рисунке ниже. Положение здесь в px, а не в dp. Мой вопрос чем-то напоминает этот вопрос Как работают android экранные координаты?

enter image description here

Ниже приведен файл xml макета:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".TestActivity">

    <LinearLayout
        android:layout_width="300px"
        android:layout_height="150px"
        android:background="@color/colorAccent"
        android:orientation="vertical"
        android:layout_centerInParent="true"
        android:id="@+id/linearLayout"
        >
    </LinearLayout>

</RelativeLayout>

Есть ли способ сделать это в android studio. Я много искал и просматривал документацию android для разработчиков, но ничего не понял. Я буду очень признателен за ваши добрые отзывы об этом.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Это просто случай установки top и left поля 50, а в остальном все размеры 300 или что угодно еще. Я предполагаю, что нижний угол должен читать 300,200? Таким образом, общие размеры составляют 300x150?

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:layout_width="300dp"
        android:layout_height="150dp"
        android:layout_marginTop="50dp"
        android:layout_marginLeft="50dp"/>

</FrameLayout>

Редактировать: Единственный макет, который я могу придумать, позволит вам определить все дочерние элементы с абсолютными значениями в XML - это класс AbsoluteLayout.

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

   <View
      android:layout_width="300dp"
      android:layout_height="150dp"
      android:layout_x="50dp"
      android:layout_y="50dp" />

</AbsoluteLayout>

Однако вы заметите, что он устарел уже более десяти лет. Android не поощряет вас определять макеты в абсолютном выражении, потому что они плохо масштабируются. Вместо этого вам следует использовать другой макет (возможно, ConstraintLayout) и определить все элементы пользовательского интерфейса относительно друг друга.

Вы также можете определить все в абсолютных значениях, если вы сделаете это самостоятельно в Java, определив пользовательский вид. Это потребует много работы, однако,

1 голос
/ 17 апреля 2020

Думайте об этом по-другому, вы можете установить макет прямо в любой х или у. Поэтому, если вы хотите загрузить линейный макет с заданными координатами x и y от всех ваших координат, найдите диагональ x и y. Например, в вашем случае xmid будет 50 + 300/2, а ymid будет таким же. Тогда используйте это:

 val fromXDelta = xmid - linearLayouWidth/2
 val fromYDelta = ymid - linearLayoutHeight/2

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