如何实现文本模糊和阴影的Android Button动画

时间:2019-02-11 05:59:16

标签: java android animation android-styles

我想在Android中实现此按钮动画。下面的示例来自iOS。我希望阴影在用户单击按钮时消失,并在用户释放按钮后重新出现。

任何帮助将不胜感激。

enter image description here

4 个答案:

答案 0 :(得分:1)

您需要添加如下颜色。例如,颜色名称为button_text_color.xml。这是.xml文件,需要将其放入color文件夹中。如果color文件夹不存在,请在您的res目录中创建一个。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#50FFFFFF" android:state_pressed="true" />
    <item android:color="#FFFFFF" android:state_pressed="false" />
</selector>

检查是否在按下状态下为白色添加了50%的透明度。现在,只需在声明的Button中添加此属性。

现在,您需要将背景可绘制对象放入drawable文件夹中。例如,让我们以drawable的名称为button_state_list_animator.xml。这应该具有以下内容。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <layer-list>
            <item>
                <shape>
                    <solid android:color="@android:color/darker_gray" />
                    <corners android:radius="19dp" />
                </shape>
            </item>
            <item android:bottom="5px">
                <shape>
                    <padding android:bottom="5dp" />
                    <gradient android:angle="270" android:endColor="#163969" android:startColor="#1c4985" />
                    <corners android:radius="19dp" />
                    <padding android:bottom="10dp" android:left="10dp" android:right="5dp" android:top="10dp" />
                </shape>
            </item>
        </layer-list>
    </item>

    <item android:state_pressed="true">
        <layer-list>
            <item>
                <shape>
                    <solid android:color="#102746" />
                    <corners android:radius="19dp" />

                </shape>
            </item>
            <item android:bottom="5px">
                <shape>
                    <padding android:bottom="5dp" />
                    <gradient android:angle="270" android:endColor="#163969" android:startColor="#1c4985" />
                    <corners android:radius="19dp" />
                    <padding android:bottom="10dp" android:left="10dp" android:right="5dp" android:top="10dp" />
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

现在,您的按钮构造非常简单。

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_margin="32dp"
    android:background="@drawable/button_state_list_animator"
    android:text="Save Changes"
    android:textColor="@color/button_text_color" />

这是我的代码的屏幕截图。

enter image description here

enter image description here

您也可以使用library制作下推式动画,如此处的答案所述。

希望有帮助!

答案 1 :(得分:1)

您可以使用以下库:pushdown-anim-click

如何安装:

compile( 'com.github.thekhaeng:pushdown-anim-click:1.1.1' ){
    exclude group: 'com.android.support'
}

使用方法:

Button button = findViewById( R.id.button );

PushDownAnim.setPushDownAnimTo( button, ... )
    .setOnClickListener( new View.OnClickListener(){
        @Override
        public void onClick( View view ){
            Toast.makeText( MainActivity.this, "PUSH DOWN !!", Toast.LENGTH_SHORT ).show();
        }

});

对于影子:

如我所见,库文件只有三个Java文件。他只是使用课堂为按钮制作动画。您可以通过this way在按钮中添加阴影。即使我创建了issue,您也可以继续注意。

enter link description here

有关更多功能,您可以访问github链接。

谢谢。

答案 2 :(得分:0)

在按钮下方添加一个以背景为阴影的布局。在button.setOnTouchListener中,当按下按钮时隐藏布局,并在释放时使其可见。 但是,仅当阴影在下面时才起作用。

答案 3 :(得分:0)

在自定义按钮上单击时,使用动画效果(如下代码)。

jq --arg status "$status" --arg ref "$ref" -f program.jq test.json

在按钮上设置动画单击使用。

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

尝试根据需要更改Alpha值并查看效果。