Ответ 1
скажем, что mView
- это вид, который вы хотите оживить:
ObjectAnimator
.ofFloat(mView, "translationX", 0, 25, -25, 25, -25,15, -15, 6, -6, 0)
.setDuration(duration)
.start();
Как я могу добиться анимации встряски/вобуляции в андроиде программно. Доступна библиотека AndroidViewAnimations, благодаря которой мы можем получить эффект. Но я не хочу использовать какую-либо библиотеку для этой цели, поскольку она имеет тенденцию увеличивать размер apk.
Код, присутствующий в анимации AndroidViewAnimations для тряски, выглядит следующим образом:
public class ShakeAnimator extends BaseViewAnimator {
@Override
public void prepare(View target) {
getAnimatorAgent().playTogether(
ObjectAnimator.ofFloat(target, "translationX", 0, 25, -25, 25, -25,15, -15, 6, -6, 0)
);
}
}
Может annyone сказать мне, как я могу достичь этого без каких-либо библиотек.
скажем, что mView
- это вид, который вы хотите оживить:
ObjectAnimator
.ofFloat(mView, "translationX", 0, 25, -25, 25, -25,15, -15, 6, -6, 0)
.setDuration(duration)
.start();
Просто чтобы дать еще один возможный ответ на вопрос. Приведенный ниже файл анимации необходимо поместить в папку res/anim:
shake.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator">
<translate
android:duration="66"
android:fromXDelta="0%p"
android:toXDelta="-2%p" /> <!-- -2 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="66"
android:toXDelta="4%p" /> <!-- 2 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="132"
android:toXDelta="-4%p" /> <!-- -2 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="198"
android:toXDelta="4%p" /> <!-- 2 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="264"
android:toXDelta="-3%p" /> <!-- -1 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="330"
android:toXDelta="2%p" /> <!-- 1 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="396"
android:toXDelta="-1.5%p" /> <!-- -0.5 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="462"
android:toXDelta="1%p" /> <!-- 0.5 -->
<translate
android:duration="66"
android:fromXDelta="0%p"
android:startOffset="528"
android:toXDelta="-0.5%p" /> <!-- 0 -->
</set>
И использовать его в коде (здесь, в Kotlin):
val animShake = AnimationUtils.loadAnimation(requireContext(), R.anim.shake)
mView.startAnimation(animShake)