Утечки файла XML progressDrawable для нескольких объектов одновременно - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть файл XML progressDrawable для моего ListView. Это работает хорошо, но я обнаружил, что если я использую один XML-файл Drawable, чтобы создать фон для нескольких объектов за один раз, он работает неправильно.

Теперь я только что создал несколько файлов XML Drawable для каждого элемента из моего ListView.

Теперь мое решение таково:

for (int i = 0; i < 3; i++) {
                    View v1 = getActivity().getLayoutInflater().inflate(R.layout.item_results, null);
                    ProgressBar bar = v1.findViewById(R.id.MyDonut);
                    bar.setProgressDrawable(getResources().getDrawable(i==0?R.drawable.circle1:i==1?R.drawable.circle2:R.drawable.circle3));
                    listView.addHeaderView(v1);
}                 

Здесь circle1, circle2, circle3 - похожие файлы XML Drawable. Я думаю, что мое решение слишком негибкое.

Мой круг:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape
        android:shape="ring"
        android:thicknessRatio="10"
        android:useLevel="false">
        <solid android:color="@color/orange" />
    </shape>
</item>
<item>
    <rotate
        android:fromDegrees="270"
        android:toDegrees="270"
        android:pivotX="50%"
        android:pivotY="50%">
        <shape
            android:shape="ring"
            android:thicknessRatio="10"
            android:useLevel="true">
            <solid android:color="@color/green" />
        </shape>
    </rotate>
</item>
<item android:left="75dp" android:gravity="center">
    <rotate android:pivotX="0%" android:fromDegrees="270" android:toDegrees="270">
        <shape
            android:shape="line"
            android:useLevel="false">

            <size android:width="75dp" android:height="75dp"/>
            <stroke android:width="3dp" android:color="@color/light"/>
        </shape>
    </rotate>
</item>
<item android:left="75dp" android:gravity="center">
    <rotate android:pivotX="0%" android:fromDegrees="270" android:toDegrees="630">
        <shape
            android:shape="line"
            android:useLevel="false">

            <size android:width="75dp" android:height="75dp"/>
            <stroke android:width="3dp" android:color="@color/light"/>
        </shape>
    </rotate>
</item>

item-results только содержит:

<ProgressBar
        android:progress="0"
        android:id="@+id/MyDonut"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:background="@color/light"
        style="?android:progressBarStyleHorizontal"/>

А как насчет других решений этой проблемы?

1 Ответ

0 голосов
/ 05 апреля 2019

Наконец, я нашел хорошее решение.Мы можем использовать drawable.mutate() для установки другого Drawable со всеми свойствами из родительского Drawable.

Документация: https://developer.android.com/reference/android/graphics/drawable/Drawable#mutate()

Можно использовать этот способ:

progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.circle).mutate());

...