web-dev-qa-db-ja.com

Android Animate Rotate

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

「パッケージ 'Android'の属性 'frameDuration'のリソース識別子が見つかりません」というエラーが表示されます-これは、frameDurationがプライベート属性であることを意味します。この「アニメーション回転」機能を使用する方法はありますか?

私の仕事は、システムのデフォルトの不確定な進行状況バーを置き換えることです。できるだけ少ないコードでそれをしたいです(可能な場合は、いくつかの属性を変更するだけです)。 ProgressBarビューを使用して、以下を設定します。

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

そして、「@ drawable/pia_sivuvator」をそのオブジェクトに向けると、私の仕事は彼らと同じくらいエレガントになりますが、私はそれらのプライベートな属性にこだわっています。

助けて?

52
oriharel

私はまったく同じ問題に遭遇しました。これらのパラメーター(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);
60
Ian G. Clifton

アニメーションを作成する代わりに(XML構成だけでなく、より多くのコードが必要です)、layer-list描画可能リソースとして。 layer-listanimated-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
rwozniak

プライベート属性を回避する方法がわかりません、同じ問題があります。

ちなみに、ProgressBarのこれらの属性を変更する場合:

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

values/styles.xmlファイルで標準Android one:

<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"/>
...
8
Mario Lenci

このドローアブル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
Intrications

これが回転アニメーションの簡単な説明です。これを試してみてください。

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