Подтвердить что ты не робот

Android-цель useLevel в теге формы

Какова цель использования XML-тега формы android formLevel? Это относится к списку слоев, но не имеет значения.  Из docs я нашел замену тега useLevel:

Указывает, влияет ли уровень рисования на способ рисования градиента.

Итак, если у меня есть следующий фрагмент xml:

    <?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadius="15dp"
    android:thickness="10dp"
    android:useLevel="false">

    <solid android:color="#ababf2" />

    <size
        android:height="50dp"
        android:width="50dp" />
</shape>

то с использованием useLevel = true кольцо отключено. Для отображения кольца должно быть неверно. Но какова цель этого атрибута? Документы не ясны.

4b9b3361

Ответ 1

Это для ProgressBars. Например этот метод использует форму кольца в качестве допустимого прогресса.

Рез/рисуем/github_232_circular.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:innerRadiusRatio="2.3"
       android:shape="ring"
       android:thickness="3.8sp"
       android:useLevel="true">
    <solid android:color="#ff0000" />
</shape>

В вашем макете:

<ProgressBar
    android:id="@+id/progress"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="64dp"
    android:layout_height="64dp"
    android:layout_gravity="top|end"
    android:max="100"
    android:progress="0"
    android:progressDrawable="@drawable/github_232_circular"
/>

В принципе, useLevel делает так, чтобы выталкиваемый можно было отрисовать частично. Например, существует метод ImageView.setImageLevel(), который позволяет вам установить "уровень", например. 25% прогресса, поэтому кольцо можно было бы вычертить как четверть круга. И ProgressBar.setProgress() делает то же самое, обновляя "уровень" выпадающего, который вы установили на ProgressBar.