#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:
Для того, чтобы создать настраиваемый индикатор прогресса (вращающийся круг прогресса, в вашем случае)
- Создайте файл макета (.xml) или используйте изображение (с возможностью рисования) для перемещения круга. Поместите его в папку для рисования в res.
- Используйте этот чертеж в качестве источника для отображения изображения в макете для индикатора загрузки.
- Используйте этот 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"/>