2016-01-12 30 views
1

我有一个RecyclerView,具有RippleEffect以及一个StateListAnimator(其在下文示出):的Android:永久性地提升查看

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

http://stackoverflow.com/questions/24458615/how-to-use-statelistanimator – Raghunandan

+0

这是一个StateListAnimator。即它将使一个高度动画,然后将其制作为动画。我希望在初始动画后抬高为永久性的 – TejjD

+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来处理所选状态。如果视图中选择则其8dp海拔

<item android:state_selected="true"> 
    <set> 
     <objectAnimator 
      android:duration="@android:integer/config_shortAnimTime" 
      android:propertyName="translationZ" 
      android:valueTo="8dp" 
      android:valueType="floatType"/> 
    </set> 
</item> 

现在:您可以添加一个新的项目,以赶上state_selected="true"。如果未选中,则StateListAnimator将落入默认海拔0dp

+0

啊,它的工作原理,但不是我需要使用它的地方。如果你在这里http://stackoverflow.com/questions/34673988/android-include-with-rippleeffect-statelistanimator,我需要提升每个被选中的项目。我会在你回答我的问题时标记正确。你能帮助我吗?关于该问题中项目的提升。谢谢 – TejjD