安卓按钮动画

3

我这里有两个按钮,希望它们在被点击后能够有一些动画效果。可以放大一点然后再缩回去。

以下是按钮的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文件中。
有人可以帮助我展示一些东西,告诉我应该做什么才能实现它吗?
非常感谢您的时间。

1
https://github.com/duslee/CustomButton - IntelliJ Amiya
1
@IntelliJAmiya,非常好的示例,但我的意思是当我点击按钮时,它应该略微变大,当我离开按钮时,它应该恢复原状。 - Konstantinos Natsios
1
请看这里:https://dev59.com/TVfUa4cB1Zd3GeqPK74a。只需检查逻辑即可。 - IntelliJ Amiya
1
我希望上述URL能够满足您的需求。 - IntelliJ Amiya
2个回答

4
使用 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();
        }
    });

我遇到了错误(“无法解析符号”objectanimator“和”propertyvaluesholder“),你有什么想法应该为这两个声明什么? - Konstantinos Natsios
你的目标 API 是什么?如果你想使用 Animator,目标 API 应该在 11 及以上。 - shhp
最低SDK版本14 目标SDK版本23 - Konstantinos Natsios
你是否已经添加了这样的导入 import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; - shhp
是的,但当我尝试运行它时,它会崩溃并显示以下错误: java.lang.RuntimeException: 无法实例化活动ComponentInfo{com.example.ioulios.ellak/com.example.ioulios.ellak.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.View android.view.Window.findViewById(int)” - Konstantinos Natsios
我有一个ImageButton而不是Button。 - Konstantinos Natsios

1
在按钮的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>

在drawable文件夹下面吗? - Konstantinos Natsios
你把button_click文件放在哪里了? - divinemaniac
res>anim>button_click ... 我声明了一些东西,现在没有错误,只有在最后一个 "}" 中它说 (需要 ',' 或 ')') - Konstantinos Natsios
似乎你遇到了语法错误。你能给我看看你的代码吗? - divinemaniac
主活动的整个代码? - Konstantinos Natsios
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接