XML progressDrawable утечки файлов, для нескольких объектов во время

#java #xml #android-layout #drawable #layer-list

#java #xml #android-макет #drawable #layer-list

Вопрос:

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

Теперь я просто создал несколько файлов XML для рисования для каждого элемента из моего 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 для рисования. Я думаю, что мое решение слишком негибкое.

Мой круг:

 <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:

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

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

Это можно использовать таким образом:

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