我有一个RecyclerView
,它有一个RippleEffect和一个StateListAnimator(如下所示):
anim_lift.xml
<?xml version="1.0" encoding="utf-8"?>
<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="8dp"
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>
问题是,如何在单击时提升使用此xml的视图,然后在再次单击视图时撤消该视图。
答案 0 :(得分:2)
这可以通过使用View的选定状态来实现。如果您点击查看自己setSelected(true)
,再次点击它setSelected(false)
。
yourView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
v.setSelected(!v.isSelected()); // toggle selected state
}
});
然后可以由StateListAnimator处理所选状态。您可以添加一个新项目以捕获state_selected="true"
:
<item android:state_selected="true">
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="8dp"
android:valueType="floatType"/>
</set>
</item>
现在,如果选择了视图,它将具有8dp
的高程。如果未选中,则StateListAnimator将降至默认高程0dp
。