Android: постоянно повышать 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-файл при нажатии, а затем уменьшить его при повторном нажатии.
1 ответ
Решение
Это может быть достигнуто с помощью выбранного состояния просмотра. Если вы нажмете кнопку 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
,