5

iPhoneのようにアイコンを振るアプリを実装しています。

どうすれば同じものを実装できますか?

アニメーションのコードをここに添付しました。解決策を教えてください。スタックオーバーフローで既に指定されているsolnを試しましたが、私の場合は機能しません。そして、このクラスは、このアニメーション セットが記述されている非アクティビティ クラスです。

protected void animateDragged(){
    View v = getChildAt(dragged);
    int x = getCoorFromIndex(dragged).x + childSize / 2, y = getCoorFromIndex(dragged).y + childSize / 2;
    int l = x - (3 * childSize / 4), t = y - (3 * childSize / 4);
    v.layout(l, t, l + (childSize * 3 / 2), t + (childSize * 3 / 2));
    AnimationSet animSet = new AnimationSet(true);
    ScaleAnimation scale = new ScaleAnimation(.667f, 1, .667f, 1, childSize * 3 / 4, childSize * 3 / 4);
    scale.setDuration(animT);
    AlphaAnimation alpha = new AlphaAnimation(1, .5f);
    alpha.setDuration(animT);

    animSet.addAnimation(scale);
    animSet.addAnimation(alpha);
    animSet.setFillEnabled(true);
    animSet.setFillAfter(true);

    v.clearAnimation();
    v.startAnimation(animSet);
}

ありがとう

4

2 に答える 2

8

フォルダで作成できる場合がshake.xmlありanimます。

    <?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="100"
    android:fromDegrees="-5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:repeatMode="reverse"
    android:toDegrees="5" />

animateDragged()メソッドで次のように使用します

Animation animation=AnimationUtils.loadAnimation(this,R.anim.shake);
v.startAnimation(animation);
于 2012-10-04T05:52:28.397 に答える
1

プログラムで各ビューに異なるランダム アニメーションを作成することもできます。各アイコンのループで以下のコード スニペットを使用するだけです

        float px = ((float) Math.random() * .5f);
        float py = ((float) Math.random() * .5f);

        RotateAnimation anim = new RotateAnimation((float) Math.PI / 2 * -1.f, (float) Math.PI / 2,
                RotateAnimation.RELATIVE_TO_SELF, .25f + px,
                RotateAnimation.RELATIVE_TO_SELF, .25f + py);
        anim.setDuration((long) (80. + (Math.random() * 50.)));
        anim.setRepeatCount(RotateAnimation.INFINITE);
        anim.setRepeatMode(RotateAnimation.REVERSE);

        v.startAnimation(anim);
于 2017-01-10T15:49:10.530 に答える