Android: 永久提升视图
Android: Permanently elevate View
我有一个 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 的视图,然后在再次单击该视图时取消提升。
这可以通过使用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
。
我有一个 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 的视图,然后在再次单击该视图时取消提升。
这可以通过使用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
。