如何模仿Lollipop(Material Design)按钮动画?

时间:2016-01-23 01:55:44

标签: java android xml animation material-design

有一种名为Widget.Material.Button的风格,它具有我真正喜欢的动画效果(它会使你的点击“闪现”),我希望能够在我的代码中重复使用它。

我试图让它具有透明的背景色,因为默认情况下它是灰色的,当应用于我的ViewGroup个对象时效果不佳。

是否有一种简单的方法来保留动画,但摆脱背景颜色?

我已经尝试设置属性android:background="@android:color/transparent",但这会导致动画完全停止工作。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    style="@android:style/Widget.Material.Button"
    tools:targetApi="lollipop">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, world!"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is just another line of text."/>

</LinearLayout>

2 个答案:

答案 0 :(得分:3)

正如this blog在“可点击的观看次数”下所述,您可以使用android:background="?attr/selectableItemBackground

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="?attr/selectableItemBackground">
  ...
</LinearLayout>

答案 1 :(得分:2)

很抱歉最初给错了位。看起来更深一点的问题是背景颜色已被定义为您用于颜色高光的MaterialTheme扩展的任何内容的一部分。具有讽刺意味的是,它们来自其他地方的透明来源但不在这里吗?

您想要的是制作两个新的xml文件来定义您的属性

在vales-v21 / styles.xml中,您可以按照自己喜欢的方式重新定义这些内容,或者消除您不想覆盖的值

如果您只想要纹波,请使用在底部定义的可绘制代码

print

然后你的按钮背景样式 /drawable-v21/material_background_ripple.xml

 <style name="MyMaterialButton" parent=android:Widget.Material.Button>
        <item name="background">@drawable/material_background_ripple</item>
        <item name="textAppearance">?attr/textAppearanceButton</item>
        <item name="minHeight">48dip</item>
        <item name="minWidth">88dip</item>
        <item name="stateListAnimator">@anim/button_state_list_anim_material</item>
        <item name="focusable">true</item>
        <item name="clickable">true</item>
        <item name="gravity">center_vertical|center_horizontal</item>
    </style>

<强>节录: 你有没有尝试过 。customView.getWindow()setBackgroundDrawableResource(R.color.transparent);