Android Animate Rotate - PullRequest
       30

Android Animate Rotate

52 голосов
/ 05 декабря 2010

Я немного покопался в коде Android и увидел использование в неопределенном индикаторе выполнения.после попытки создать свой собственный объект рисования с этим тегом:

<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 является закрытым атрибутом,Есть ли способ использовать эту функцию «animate-rotate»?

Моя задача - заменить неопределенный индикатор выполнения системы по умолчанию.Я хотел бы сделать это с как можно меньшим количеством кода (просто измените несколько атрибутов, если это возможно).Используя представление ProgressBar, установка:

android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"

и указание «@ drawable / pia_sivuvator» на этот объект сделало бы мою задачу такой же элегантной, как они приходят, но я застрял на этих закрытых атрибутах.*

помогите?

Ответы [ 5 ]

59 голосов
/ 31 января 2011

Я столкнулся с точно такой же проблемой. Вы можете исключить эти параметры (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);
8 голосов
/ 30 сентября 2014

Вместо создания анимации (требуется больше кода, а не только конфигурация 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>
8 голосов
/ 29 декабря 2011

Я не знаю, как обойти личные атрибуты, у меня та же проблема.

Кстати, если вы хотите изменить эти атрибуты ProgressBar:

android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"

Вы можете легко сделать это с помощью инфраструктуры стилей, определив в файле values/styles.xml стиль ProgressBar, расширяющий стандартный стиль Android:

<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"/>
...
5 голосов
/ 14 июля 2012

Я решил это, используя этот нарисованный 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" />
4 голосов
/ 26 сентября 2013

Вот простое объяснение анимации вращения, попробуйте, это поможет вам

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