Встряхнуть иконки в Android, как iPhone на длинном нажатии

Я реализую приложение, в котором я хочу пожать значки, как в 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); } 

благодаря

shake.xml вы можете сделать shake.xml в папке с shake.xml .

  <?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); 

Вы также можете делать разные случайные анимации для каждого представления программно. Просто используйте фрагмент кода ниже в цикле для каждого из ваших значков

  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);