Нам нужен закругленный угол в некоторых макетах, и мы придумали два подхода.Хотя оба подхода работают нормально, результаты немного различаются, и я хотел бы получить представление о различном поведении.
Первый подход заключается в использовании 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 для разных устройств.Любое понимание?
Спасибо