Android Rounded Corners - XML ​​против версии Java - PullRequest
0 голосов
/ 22 декабря 2018

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

Первый подход заключается в использовании XML .

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#e1d6a6" />
    <corners android:radius="9dp" />
</shape>

. Это работает.Однако проблема с подходом XML состоит в том, что цвет и радиус фиксированы, и нам нужно создать дублирующиеся элементы рисования, чтобы просто изменить любой параметр.Таким образом, мы придумали версию Java, которая является очень гибкой и работает как шарм, хотя и с немного отличающимися результатами.Ниже приведена Java-версия

void setRoundedCorners(View view, int color, float radius) {
    GradientDrawable drawable = new GradientDrawable();
    drawable.setColor(color);
    drawable.setCornerRadius(radius);
    view.setBackground(drawable);
}

Хотя оба подхода работают нормально, для получения одинакового эффекта для обоих параметров требуются разные значения радиуса.Например, если я использую android:radius="9dp" в XML-версии, мне нужно использовать setCornerRadius(30.0f) в Java, чтобы получить почти такой же эффект.

Поэтому мне нравится понимать любые недостатки использования Java-подхода и то, как 9dp в xml преобразуется в параметр setCornerRadius в java для разных устройств.Любое понимание?

Спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

setCornerRadius обрабатывать значение float как пиксели.Для этой функции вы можете задать то же значение 9dp, преобразовав значение dp в px в соответствии с плотностью и размером экрана устройства

Следующая строка дает эквивалентное значение пикселя 9dp

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 9, context.getResources().getDisplayMetrics());

Хотя использование XML дает высокую производительность, за рамками сцены это преобразование выполняется для отображения одинакового результата на каждом устройстве.

...