Android: анимировать круговой прогресс, который можно нарисовать

#android #android-layout #animation #drawable #android-drawable

#Android #android-макет #Анимация #с возможностью рисования #android-с возможностью рисования

Вопрос:

Мне нужен чертеж, который выглядит как вращающийся круг прогресса. Это рисование, которое я хочу использовать, например, в ImageView внутри GridView и т.д.

Итак, согласно другим сообщениям, я взял progress_medium_holo.xml из папки sdk platforms android-xx data res drawable, которая выглядит следующим образом. И я также скопировал файлы PNG, которые используются этим чертежом.

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
             android:drawable="@drawable/spinner_48_outer_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="0"
             android:toDegrees="1080" />
    </item>
    <item>
        <rotate
             android:drawable="@drawable/spinner_48_inner_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="720"
             android:toDegrees="0" />
    </item>
</layer-list>
  

В моем макете я затем использовал, например, этот ImageView, который используется для рисования прогресса.

 <ImageView
    android:id="@ id/element_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:src="@drawable/progress_medium_holo" />
  

статический круг прогресса

Но в результате получается статический круг-прогресс. Есть ли способ анимировать это с помощью определения XML и без использования кода?

Ответ №1:

Существует View named ProgressBar , который делает именно то, что вы хотите. Просто используйте это вместо вашего ImageView :

 <ProgressBar
    android:id="@ id/element_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:paddingBottom="5dp"
    android:paddingTop="5dp" />
  

Комментарии:

1. Так что мне все равно не нужен drawable. Забавно, когда я начинаю не с той стороны.

2. Неплохая идея, хотя я сталкивался с несколькими устройствами в качестве разработчика, которые просто НЕ отображают панель прогресса. Он находится в макете, установлен на ВИДИМЫЙ, но не имеет значения. Я начал искать замену ненадежной панели прогресса Android…

Ответ №2:

Для того, чтобы создать настраиваемый индикатор прогресса (вращающийся круг прогресса, в вашем случае)

  1. Создайте файл макета (.xml) или используйте изображение (с возможностью рисования) для перемещения круга. Поместите его в папку для рисования в res.
  2. Используйте этот чертеж в качестве источника для отображения изображения в макете для индикатора загрузки.
  3. Используйте этот imageview, раздувая и вызывая для него следующий startLoadingAnimation().Аналогичным образом вы можете остановить анимацию, как только ваша работа будет выполнена, просто вызвав для нее stopLoadingAnimation() .

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

 // start the loading animation

public void startLoadingAnimation(Context context) {
  Animation rotate = AnimationUtils.loadAnimation(context,
    R.anim.anim_rotate);
  rotate.setRepeatMode(Animation.INFINITE);
  mImgView.startAnimation(rotate);
}

// stop the loading animation
public void stopLoadingAnimation(){
  mImgView.clearAnimation();
}
  

anim_rotate.xml поместите этот файл в anim папку в res

 <?xml version="1.0" encoding="utf-8"?>
<rotate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromDegrees="0"
  android:interpolator="@android:anim/linear_interpolator"
  android:toDegrees="360"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="500"
  android:startOffset="0"
  android:repeatCount="infinite"
/>
  

Комментарии:

1. Да, но в этом решении мне нужно несколько строк кода. Панель выполнения другого ответа была более подходящей для моих нужд.

Ответ №3:

Спасибо за progress_medium_holo.xml . В моем случае стандартная панель прогресса (для API 23) не была видна, я перепробовал много вариантов, были видны только панели прогресса в стиле горизонтальной полосы. Затем я скопировал progress_medium_holo.xml и связал чертежи из папки sdk platforms android-xx data res drawable и в итоге получил:

 <ProgressBar
    android:id="@ id/progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:indeterminateDrawable="@drawable/progress_medium_holo"/>