Android Animate Rotate
Я сделал некоторые копания в Android-коде и увидел использование в неопределенном шаге выполнения. после попытки создать мой собственный drawable с помощью этого тега:
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_pia"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
Я получаю сообщение об ошибке:
"Идентификатор ресурса не найден для атрибута" frameDuration "в пакете" android "- это означает, что frameDuration является частным атрибутом.
Есть ли способ использовать эту функцию "анимация-поворот"?
Моя задача - заменить неопределенный индикатор выполнения по умолчанию. Я бы хотел сделать это с минимальным количеством кода (просто измените несколько атрибутов, если это возможно).
Используя представление ProgressBar, установите:
android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"
и point "@drawable/pia_sivuvator" к этому объекту сделали бы мою задачу такой же изящной, как и они, но я застрял в этих частных атрибутах.
помощь?
Ответы
Ответ 1
Я столкнулся с той же проблемой. Вы можете исключить эти параметры (framesCount и frameDuration), и это может сработать для вас. Я попытался просто исключить их, и он был анимирован, но ширина/высота, которую я устанавливал, не соблюдались, поэтому я создал просто анимацию вращения и ImageView для ее применения. Здесь файл анимации (res/anim/clockwise_rotation.xml):
<?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="1000"
android:startOffset="0"
/>
Затем вы просто надуваете анимацию, устанавливаете количество повторений и запускаете ее из представления
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_rotation);
rotation.setRepeatCount(Animation.INFINITE);
myView.startAnimation(rotation);
Ответ 2
Вместо создания анимации (требуется больше кода, а не только для конфигурации XML) используйте layer-list
в качестве ресурса с возможностью рисования.
Весьма интересно, что layer-list
является более жидким, чем animated-rotate
.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<rotate
android:drawable="@drawable/spinner_loading"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360"/>
</item>
</layer-list>
Тогда, конечно, используйте его в стилях, как писал Марио Ленци:
<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar">
<item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item>
</style>
Ответ 3
Я не знаю, как обойти частные атрибуты, у меня такая же проблема.
Кстати, если вы хотите изменить те атрибуты ProgressBar:
android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"
вы можете сделать это легко с помощью фреймворка Styles, определяющего в файле values/styles.xml
стиль ProgressBar, расширяющий стандартный андроид:
<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar">
<item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item>
</style>
а затем применить его к строке выполнения в файле макета xml.
...
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/YourProgressBarStyle"/>
...
Ответ 4
Я решил это, используя этот drawable xml. Хотя это выглядит как гладко в новых версиях Android:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_pia"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="1080" />
Ответ 5
Вот простое объяснение анимации вращения. Попробуйте это, это поможет вам
http://androidtutorials60.blogspot.in/2013/09/simple-rotate-animation-in-android.html
<rotate xmlns:android=""http://schemas.android.com/apk/res/android"">
android:duration="4000"
android:fromdegrees="0"
android:pivotx="50%"
android:pivoty="50%"
android:todegrees="360"
android:toyscale="0.0"
</rotate>