CardView 触控提升

Ily*_*tov 3 animation android material-design

我是 Android 开发的新手,我正在尝试对 cardview 点击产生提升效果。我在 stackoverflow上找到了关于这个主题的几个教程 this onethis onethis answer。所有这些教程都建议像这样创建 xml 文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_enabled="true" android:state_pressed="true">
        <set>
            <objectAnimator android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="6dp"
                android:valueType="floatType" />
        </set>
    </item>
    <item>
        <set>
            <objectAnimator android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="0"
                android:valueType="floatType" />
        </set>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

然后放到res/anim目录下。但是,当我尝试将此代码放入 res/anim/lift_on_touch.xml 时,它给了我错误“必须声明元素选择器”并建议将此文件移动到 animator 或 drawable 目录。我把它移动到 animator-v21 目录,没有错误,但它不起作用。在这种情况下我该怎么办?

PS:我将 clickable 和 stateListAnimator 属性放在我的 CardView 中。这是我的 CardView:

<android.support.v7.widget.CardView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:cardElevation="2dp"
    android:clickable="true"
    android:stateListAnimator="@animator/lift_on_touch"
    app:layout_constraintTop_toTopOf="@+id/top_guideline"
    app:layout_constraintRight_toRightOf="@+id/right_guideline"
    app:layout_constraintLeft_toLeftOf="@+id/left_guideline"
    app:layout_constraintBottom_toBottomOf="@+id/inner_top_guideline" />
Run Code Online (Sandbox Code Playgroud)

Nis*_*arg 5

尝试用 包装动画师资源<set>

<?xml version="1.0" encoding="utf-8"?>
<set>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:state_enabled="true"
            android:state_pressed="true">
            <set>
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="translationZ"
                    android:valueTo="6dp"
                    android:valueType="floatType" />
            </set>
        </item>
        <item>
            <set>
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="translationZ"
                    android:valueTo="0"
                    android:valueType="floatType" />
            </set>
        </item>
    </selector>
</set>
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可以解决问题,但它没有解释为什么或如何回答问题。请对您的代码进行解释,因为这确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您的代码建议的原因 (2认同)