Android 按钮动画

Android button animate

我这里有这些按钮,我希望它们都有一些点击动画。 长大一点再return恢复正常

这是按钮 xml 代码。

<ImageButton
        android:layout_width="165dp"
        android:layout_height="60dp"
        android:text="next"
        android:id="@+id/next"
        android:src="@drawable/next"
        android:background="@android:color/transparent"
        android:layout_alignParentBottom="true"
        android:layout_alignRight="@+id/linearLayout"
        android:layout_alignEnd="@+id/linearLayout" />

    <ImageButton
        android:layout_width="170dp"
        android:layout_height="60dp"
        android:text="confirm"
        android:src="@drawable/confirm"
        android:background="@android:color/transparent"
        android:id="@+id/confirm"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
         />

这些按钮在一个 activity_main.xml 文件中。

谁能帮我看看我应该怎么做才能实现它?

非常感谢您的宝贵时间。

在按钮的onclick 中,我们使用view.startAnimation() 方法启动我们要使用的动画。我们首先使用 AnimationUtils.loadAnimation()

加载所需的动画
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.button_click));            
    }
}

现在在 anim 文件夹下创建一个名为 button_click.xml 或任何你想命名的文件。

anim/button_click.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
    android:fromXScale = "1"
    android:toXScale = "0.9"
    android:fromYScale = "1"
    android:toYScale = "0.9"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration = "50">
    </scale>
</set>

使用Animator可以轻松达到目的:

findViewById(R.id.next).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Animator scale = ObjectAnimator.ofPropertyValuesHolder(v,
                    PropertyValuesHolder.ofFloat(View.SCALE_X, 1, 1.5f, 1),
                    PropertyValuesHolder.ofFloat(View.SCALE_Y, 1, 1.5f, 1)
                    );
            scale.setDuration(1000);
            scale.start();
        }
    });