Загрузка формы с помощью Drawable на Android - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь загрузить фигуру, используя нарисованные программно, чтобы сделать цвет фона более стильным.

По сути, загрузка фигуры с использованием XML-файла проста:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
    android:startColor="#ffffff"
    android:centerColor="#00ffff"
    android:endColor="#000000"
    android:type="linear"
    android:angle="90"/>

Однако я пытаюсь загрузить этот XML-файл с сервера , так как он должен изменяться сезонно.(Например, весна - розовая, лето - синей, а осень - оранжевой)

После загрузки файла XML, который находится в /data/data/package/resources/shape.xml, япопытался загрузить этот набор цветов фона с помощью GradientDrawable, так как все дело в градиенте.

Существует множество практических руководств по созданию нового градиента, но не о применении предварительно загруженного градиента.

Я пробовал это:

 view.setBackground(GradientDrawable.createFromPath("/data/data/package/resources/shape.xml"));

Здесь представление - это файл активности, например, RelativeLayout или что-то еще

Однако результат - этоЦвет фона по умолчанию - синий.

Теперь я изменил рисование на:

view.setBackground(ShapeDrawable.createFromPath("/data/data/package/resources/shape.xml"));

Я изменил параметр рисования на ShapeDrawable, так как XML содержит Shape

Результат тот же, ничего не изменилось.Переключение на обычное рисование не помогает решить проблему.

Есть ли другой способ применить файл XML из внешнего хранилища к рисованию?Иначе, что я написал, это метод применения, но есть некоторые ошибки?

1 Ответ

0 голосов
/ 08 июня 2018

Просто откройте свой макет с помощью findViewById и установите его фон.Убедитесь, что вы храните ваш xml в папке drawable.

Для constraintLayout

ConstraintLayout constraintLayout=findViewById(R.id.clay);
constraintLayout.setBackground(getDrawable(R.drawable.prac_shape));

prac_shape - это идентификатор элемента shape.

EDIT: для построенияградиент динамически через Java:

GradientDrawable gradient = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]  {getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimaryDark)});
gradient.setShape(GradientDrawable.RECTANGLE);
constraintLayout.setBackground(gradient);

Вы можете поэкспериментировать с этим, чтобы установить его так, как вам нравится.Вам просто нужно проанализировать ваш запрос и передать соответствующие параметры конструктору и методам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...