如何在点击按钮或视图后以编程方式放大按钮或视图

时间:2014-12-23 09:21:51

标签: android button android-animation

我的应用中有一些按钮,我想在点击时按比例放大

为此我创建了一个选择器

selector_sms_button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ic_sms_big" android:state_pressed="true"></item>
    <item android:drawable="@drawable/ic_sms" android:state_pressed="false"></item>

</selector>

并声明我的按钮如下

  <Button
        android:id="@+id/sms"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/selector_sms_button" />

问题是 - 按钮在点击时不会增长 ic_sms_big的大小为300x300dp,ic_sms的大小为72x72dp

如果我绝对不必要,我不想为他们创建动画文件。 问题是点击时按钮应该增长到其尺寸的至少3倍,而且它没有。

我该怎么做才能解决它?

编辑: 我的要求&#34;我不想创建一个动画文件&#34;并不意味着我不想为它创建XML文件,但我根本不想在代码中为它创建引用。 我有6个应该这样做的按钮

7 个答案:

答案 0 :(得分:2)

如果您不想添加文件,可以通过编程方式执行

Animation anim = new ScaleAnimation(
        1f, 1f, // Start and end values for the X axis scaling
        startScale, endScale, // Start and end values for the Y axis scaling
        Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
        Animation.RELATIVE_TO_SELF, 1f); // Pivot point of Y scaling
anim.setFillAfter(true); // Needed to keep the result of the animation
v.startAnimation(anim);

答案 1 :(得分:1)

解决方案是在较小版本的按钮中添加填充 它使用与较大图像完全相同的像素数量,但有大量填充,然后单击图像更改,图标显示增长

答案 2 :(得分:1)

要以编程方式实现它,您可以使用以下代码:

private void animateView() {
    AnimationSet animationSet = new AnimationSet(true);

    ScaleAnimation growAnimation = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    ScaleAnimation shrinkAnimation = new ScaleAnimation(3.0f, 1.0f, 3.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

    animationSet.addAnimation(growAnimation);
    animationSet.addAnimation(shrinkAnimation);
    animationSet.setDuration(200);

    viewToAnimate.startAnimation(animationSet);
}

答案 3 :(得分:0)

尝试在较小的按钮上删除android:state_pressed =“false”:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ic_sms_big" android:state_pressed="true"></item>
    <item android:drawable="@drawable/ic_sms" ></item>

</selector>

你也应该考虑这个:

  • 使用a选择项目时使用state_selected 键盘/ DPAD /轨迹球/等。
  • 调用View.setActivated(true)时使用state_activated。这用于“持久性选择”(例如,参见平板电脑上的设置)
  • 当用户通过触摸或a按下项目时,使用
  • state_pressed 键盘或鼠标
  • 如果项目被标记为可聚焦并且它通过键盘/ dpad /轨迹球/等的用户接收焦点,则使用
  • state_focused。或者如果该项目在触摸模式下可聚焦

答案 4 :(得分:0)

您应该在onClick方法中更改按钮的大小:

button.setLayoutParams (new LayoutParams(width, height));

答案 5 :(得分:0)

在按钮上尝试这样的事情

button.animate()
      .setDuration(2000)
      .scaleX(3.0f)
      .scaleY(3.0f);

答案 6 :(得分:0)

Animation anim = new ScaleAnimation(
                    1f, 0.7f, // Start and end values for the X axis scaling
                    1f, 0.7f, // Start and end values for the Y axis scaling
                    Animation.RELATIVE_TO_SELF, 0.5f, // Pivot point of X scaling
                    Animation.RELATIVE_TO_SELF, 0.5f); // Pivot point of Y scaling
            anim.setFillAfter(false); // Needed to keep the result of the animation
            anim.setDuration(300);
            iv_logo.startAnimation(anim);

使用此工具,我已经达到了预期的结果。 缩小将严格位于视图的中心。