Компоновка с центром зрения соответствует центру центрального элемента с минимальным отступом - PullRequest
0 голосов
/ 17 ноября 2011

Я пытаюсь создать простой макет с изображением и двумя надписями (один над изображением, а другой под ним). Я использую раздутый вид, чтобы нарисовать его на холсте. Меня интересует создание вида с прямоугольником, в центре которого находится центр изображения. Использование размеров fill_parent или match_parent для макета нежелательно, поскольку окончательный вид будет занимать все доступное пространство, а не минимальное пространство (в результате получается слишком большое растровое изображение).

Это код, который я использовал до сих пор:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView android:layout_centerInParent="true"
        android:layout_width="wrap_content" android:id="@+id/ivBeaconType"
        android:layout_height="wrap_content" android:src="@drawable/bt_beacon"></ImageView>
    <TextView android:layout_above="@id/ivBeaconType" android:layout_centerHorizontal="true"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="12dp" android:text="AABBCCDDEEFF" android:id="@+id/tvId"
        android:textColor="#72C8E0"></TextView>
    <TextView android:layout_below="@id/ivBeaconType" android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="-99 dB" android:id="@+id/tvRssi" android:textColor="#FF0000"></TextView>
</RelativeLayout>

У этого есть проблема. Относительный макет не подходит для обоих текстов (метка выше не отображается, а метка внизу закрашена слишком близко к изображению). Я мог бы правильно визуализировать вид, выровняв изображение под первым текстом и третьим текстом под изображением, но это не привело бы к идеальному центру вокруг центра изображения (или при использовании линейного расположения).

Что можно сделать? Другим правильным решением было бы получить центр изображения относительно области рисования макета. Есть идеи?

1 Ответ

0 голосов
/ 17 ноября 2011

Я понял.Методы getLeft () / getRight () / getTop () / getBottom () представления возвращают относительную позицию внутри родителя.Единственная капча состоит в том, что они возвращают действительные значения только после фазы макета, поэтому это решило мой вопрос:

    if (beaconBitmap == null)
    {
        /* Calculamos las dimensiones si no está creado el bitmap */
        beaconView.invalidate();
        beaconView.refreshDrawableState();
        beaconView.measure(
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        beaconView.layout(0, 0, beaconView.getMeasuredWidth(),
                beaconView.getMeasuredHeight());
        ImageView ivBeaconType = (ImageView) beaconView
                .findViewById(R.id.ivBeaconType);
        Rect beaconIconArea = new Rect(ivBeaconType.getLeft(),
                ivBeaconType.getTop(), ivBeaconType.getRight(),
                ivBeaconType.getBottom());
        beaconBitmapCenterX = beaconIconArea.centerX();
        beaconBitmapCenterY = beaconIconArea.centerY();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...