2010-12-05 3 views
49

Ich habe etwas in Android-Code graben, und sah die Verwendung von indeterminate Fortschrittsbalken. nach dem Versuch, meine eigene ziehbar mit diesem Tag zu erstellen:Android Animate Drehen

<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" /> 

ich einen Fehler: „No Resource Identifier für Attribut‚frameDuration‘im Paket‚Android‘gefunden“ - was bedeutet, dass frameDuration ein privates Attribut ist. Gibt es eine Möglichkeit, diese "animate-rotate" -Funktion zu verwenden?

Meine Aufgabe ist es, den Standard unbestimmten Fortschrittsbalken des Systems zu ersetzen. Ich würde es gerne mit so wenig Code wie möglich machen (wenn möglich nur einige Attribute ändern). die ProgressBar Ansicht Verwendung, Einstellung:

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

und Punkt „@ ziehbar/pia_sivuvator“ auf dieses Objekt meine Aufgabe als elegant hätte, wie sie kommen, aber ich bin auf diesen privaten Attribute fest.

Hilfe?

+1

Habe das gleiche Problem. Das Ausschließen von Parametern ('framesCount' und' frameDuration') hilft nicht viel. Animation funktioniert, sieht aber für mich nicht gut aus (Animation ist nicht flüssig, wie eine niedrige Framerate). Erstellt ein Problem zu diesem Problem http://code.google.com/p/android/issues/detail?id=19248 –

Antwort

57

Ich lief genau das gleiche Problem. Sie können diese Parameter ausschließen (framesCount und frameDuration) und es kann für Sie funktionieren. Ich habe versucht, sie einfach auszuschließen, und es animierte gut, aber die Breite/Höhe, die ich einstellte, wurden nicht respektiert, so dass ich am Ende eine einfache Rotationsanimation und eine ImageView erstellte, um es anzuwenden. Hier ist die Animationsdatei (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" 
/> 

Dann aufblasen Sie einfach Ihre Animation setzen Wiederholungszahl, und starten Sie es aus der Sicht

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_rotation); 
rotation.setRepeatCount(Animation.INFINITE); 
myView.startAnimation(rotation); 
+24

Verwenden Sie 'android: repeatCount =" infinite "' in der xml anstelle von hart Code – pleerock

+0

, wenn Sie möchten Frames_Count Parameter zu verwenden siehe http://StackOverflow.com/Questions/3760381/Rotation-Bild-Animation-List-oder-Animated-Rotate-android/14996762#14996762 – vokilam

6

Ich weiß nicht, Wie um die privaten Attribute zu arbeiten, habe ich das gleiche Problem.

Durch die Art und Weise, wenn Sie diese Attribute des ProgressBar ändern wollen:

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

Sie können es leicht mit dem Styles Rahmen definiert, in der values/styles.xml Datei einen ProgressBar Stil erstreckt Standard android ein:

<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar"> 
     <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item> 
</style> 

und dann auf den Fortschrittsbalken in der XML-Layoutdatei anwenden.

... 
<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@style/YourProgressBarStyle"/> 
... 
5

Ich löste das, indem ich dieses drawable XML benutze. Obwohl es nur auf neueren Versionen von Android glatt zu sein scheint:

<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" /> 
+0

Können Sie bitte erklären, was Sie tun von diesem RotateDrawable? http://stackoverflow.com/questions/5872257/how-doi-i-use-rotatedrawable – rds

7

Statt der Schaffung eine Animation (mehr Code erforderlich, nicht nur XML-Konfiguration), verwenden Sie layer-list als Zeichenquelle. Es ist ziemlich interessant, dass layer-list ist viel flüssiger als 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> 

Dann natürlich es in der Stile verwenden, wie Mario Lenci schrieb:

<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar"> 
    <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item> 
</style> 
+3

Hallo, wie machst du es drehen? Ich habe ein ImageView und es zeigt nur noch eine Zeichnungsdatei ... thx –