Как добавить углы в вид

1

Я добавил полную рамку вокруг представления, но мне нужно добавить только угол, как показано ниже:

Изображение 174551

Я имею в виду только красный угол.

Я попытался настроить нижний границу xml, но это не сработало:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
    <stroke android:width="10dp" android:height="10dp" android:color="#B22222" /> 
    <solid android:color="#FCE6C9" /> 
    <corners android:radius="20dp"  /> 
</shape>

Любая помощь будет оценена

Теги:

2 ответа

2
Лучший ответ

Я не думаю, что это можно сделать с помощью ShapeDrawable, так как это потребует от вас использовать какой-либо запас или дополнение для самого drawable. На самом деле есть атрибут padding, но, к сожалению, это влияет только на содержимое View, а не на само по себе.

Это означает, что простым решением было бы создать 9-патч вместо этого и применить его в качестве фона для TextView. Просто для демонстрационных целей: сделайте 9-патч похожим следующим образом:

Изображение 174551


Edit: Во-вторых, есть еще один вариант, который полагается на использование LayerDrawable для создания желаемого эффекта. Это немного утомительно, и я сомневаюсь, что это будет более эффективно, чем использование 9-патча, но по крайней мере вам не нужно отображать изображения, а это значит, что если вам нужно сделать, например, изменение цветов, это более прямолинейно.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/rounded" />
    <item android:drawable="@android:color/white" android:left="30dp"
        android:right="30dp" />
    <item android:bottom="30dp" android:drawable="@android:color/white"
        android:top="30dp" />
    <item android:bottom="30dp" android:left="10dp" android:right="10dp"
        android:drawable="@color/pink" android:top="30dp" />
    <item android:bottom="10dp" android:left="30dp" android:right="30dp"
        android:drawable="@color/pink" android:top="10dp" />

</layer-list>

Некоторые детали: @drawable/rounded - это фрагмент кода, который вы разместили сами. Следующие два элемента - это просто белые прямоугольники со смещением, чтобы создать белые края. Теперь, поскольку они также будут перекрывать розовую поверхность, нам нужно еще два розовых прямоугольника (опять же с конкретными смещениями), чтобы противостоять этому. Результат - это фон, который выглядит точно так же, как то, что вы показываете в своем вопросе.

Обратите внимание, что вы можете захотеть, можете ли вы немного оптимизировать это. По крайней мере, я бы рекомендовал не dimens.xml смещения (как, например, я сделал для простоты), но хранить их в файле dimens.xml чтобы вы могли сохранять эти значения централизованными и согласованными, ссылаясь на них как с ShapeDrawable и с LayerDrawable.

Добавление. На устройствах с предварительной ICS (или, возможно, с предварительной сотой) возникает проблема с прямой ссылкой на цвета с атрибутом android:drawable. Тем не менее, вы можете легко обойти это, установив еще один вариант (будь то 9-патч или ShapeDrawable) для представления этого цвета. Например, в приведенном выше фрагменте вы замените android:drawable="@color/pink" на android:drawable="@drawable/color_pink", где color_pink может просто быть xml файлом, содержащим:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
    <solid android:color="#FCE6C9" /> 
</shape>

Очевидно, вам нужно будет сделать то же самое для всех других цветов, на которые ссылается LayerDrawable. Протестировано на прянике 2.3.7.

  • 0
    спасибо за ваш ответ, но я применяю ваш код, который только что дал мне розовый фон без рамки, также я обращаюсь (@ drawable / округлено), поскольку я понимаю, что вы формируете код, который я уже разместил в своем вопросе
  • 0
    Интересно. Первоначально я протестировал Drawable на моем Galaxy Nexus, и это работало безупречно. После вашего комментария я также попробовал его на устройстве Gingerbread и заметил ту же проблему, которую вы описали. Кажется, есть проблема с прямой ссылкой на цвета как на рисование. Пожалуйста, смотрите приложение к моему ответу для простого обходного пути. При таком подходе ничья также правильно отображалась на моем старом устройстве. Надеюсь, это поможет.
Показать ещё 2 комментария
0

Я бы создал файл с 9 патчами и установил его в качестве фона основного контейнера. Шаги для этого будут.

  1. Вы создаете фон, который вы хотели бы использовать в фейерверке, иллюстраторе или любом другом программном обеспечении для редактирования изображений, которое вы предпочитаете.
  2. Затем обрезайте обложку так, чтобы вокруг художественной работы была только 1 пиксельная рамка. Сохраните его как png.
  3. Откройте файл draw9patch.bat в папке sdk android на вашем компьютере. C:\Program Files (x86)\Android\android-sdk\tools.
  4. Откройте файл png. Затем вы можете использовать мышь, чтобы щелкнуть по внешней границе 1 пикселя, которая превратит черные пиксели с щелчком. Области, в которых у вас есть черные пиксели как сверху, так и снизу или слева и справа, будет область, растянутая. В вашем случае вы просто хотите иметь среднюю область, где нет красной вытянутой.
  5. Мое личное предпочтение заключается в том, чтобы просто открыть файл выше и сохранить его в виде 9 файлов исправлений. Затем откройте его в моем программном обеспечении для редактирования фотографий, чтобы создать линию толщиной 1 пиксель так же, как указано выше. Это быстрее и точнее.
  6. Наконец добавьте файл в свою папку. Затем установите фон вашего контейнера основного вида на рисоваемый.

Это должно быть так. Надеюсь, это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню