19

コードまたはXML、あるいはその両方からのものであるかどうかにかかわらず、「RotateDrawable」がどのように機能するようになったのか誰かに教えてもらえますか?Drawablesのアニメーションに関するドキュメントはかなり貧弱で、アニメーションは画像に対してのみ機能するようです。すべてのドローアブルをアニメートできるようにしたいと思います。XMLからRotateDrawbleを取得しようとすると、例外が発生します。XMLからRotateDrawableを見つけるための正しい関数は何ですか?

どうもありがとう

ケルブ

4

8 に答える 8

4

RotateDrawable はアニメーション化されていないようです。代わりに、setLevel を使用してドローアブルの回転を変更する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/your_drawable"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" />

レベルを設定すると、ドローアブルが回転します。

final ImageView image = (ImageView)findViewById(R.id.imageView1);
final RotateDrawable drawable = (RotateDrawable)image.getDrawable();
drawable.setLevel(500);
于 2011-12-07T15:21:56.380 に答える
3

次のコードは、別の Drawable をプログラムで回転させる Drawable ラッパーを返します。

Drawable rotateDrawable(Drawable d, final float angle) {
    // Use LayerDrawable, because it's simpler than RotateDrawable.
    Drawable[] arD = {
        d
    };
    return new LayerDrawable(arD) {
        @Override
        public void draw(Canvas canvas) {
            canvas.save();
            canvas.rotate(angle);
            super.draw(canvas);
            canvas.restore();
        }
    };
}
于 2013-06-15T12:46:45.133 に答える
2

これは良い例です。パラメータ期間は、アニメーション化に使用されます。

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="4000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="720" >

    <shape
        android:innerRadius="20dp"
        android:shape="ring"
        android:thickness="4dp"
        android:useLevel="false" >
        <size
            android:height="48dp"
            android:width="48dp" />

        <gradient
            android:centerY="0.5"
            android:endColor="@android:color/white"
            android:startColor="#00ffffff"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>
于 2015-12-30T13:10:33.800 に答える
2

私は RotateDrawable を使ったことはありませんが、単にグラフィックの回転をアニメーション化しようとしているだけなら、必要ありません。RotateDrawable のような「レベル」を持つドローアブルは、ビューをアニメーション化するのではなく、情報を伝えることを目的としています。

次のコードは、ImageView をその中心を中心に回転させます。

ImageView myImageView = (ImageView)findViewById(R.id.my_imageview);

AnimationSet animSet = new AnimationSet(true);
animSet.setInterpolator(new DecelerateInterpolator());
animSet.setFillAfter(true);
animSet.setFillEnabled(true);

final RotateAnimation animRotate = new RotateAnimation(0.0f, -90.0f,
    RotateAnimation.RELATIVE_TO_SELF, 0.5f, 
    RotateAnimation.RELATIVE_TO_SELF, 0.5f);

animRotate.setDuration(1500);
animRotate.setFillAfter(true);
animSet.addAnimation(animRotate);

myImageView.startAnimation(animSet);
于 2011-05-03T16:19:18.627 に答える
0

ドローアブルを永久に回転させたい場合は、このようにドローアブル xml でanimated-rotate タグを使用できます。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <animated-rotate android:drawable="@drawable/ic_refresh" android:pivotX="50%" android:pivotY="50%" />
    </item>
</selector>
于 2020-12-23T06:19:25.063 に答える