Android: перекрытие двух видов (намеренно!)

просто интересно, возможно ли совместить два элемента?

Это пример того, что я пытаюсь достичь:

enter image description here

В основном это круг ImageButton, центр которого лежит на углу прямоугольника. Как мне его позиционировать? Могу ли я использовать RelativeLayout или что-то еще?

Ответ 1

Вы можете использовать RelativeLayout для синего поля, выровнять ImageView в верхнем правом углу, а затем использовать отрицательные поля, чтобы надавить на ограничивающий прямоугольник. Здесь образец, иллюстрирующий общую идею:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">



    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"        
        android:layout_marginTop="-10dp"
        android:layout_marginRight="-10dp"
        android:src="@drawable/icon"/>
</RelativeLayout>

EDIT: Я играл с этим немного больше, и вам нужно установить android: clipChildren = "false" для родителя RelativeLayout. Здесь более полная выборка:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".LoginActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">
    <RelativeLayout
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="#ff0000"
            android:layout_margin="100dp">
        <ImageView
                android:src="@drawable/ic_launcher"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="-25dp"
                android:layout_marginTop="-25dp"/>
    </RelativeLayout>
</LinearLayout>

Ответ 2

Очень простое решение - использовать маркер ImageView в отрицательных значениях (например, -40dp). Но он работает только в некоторых ситуациях.

Ответ 3

Еще один простой подход - использовать два прозрачных изображения. Эти изображения будут отображаться в верхней и правой частях синего макета. Установите фон этого изображения в виде # 00000000, чтобы сделать его прозрачным.