Android RecyclerView Item使用动画被遮挡,ClipChildren也无效的坑

clipChildren这个属性需要设置在该View的祖父布局上,也就是父布局的父布局。也就是说如果一个View想要超出父布局,需要在其祖父布局上设置android:clipChildren="false"(而不是父布局)

如图 

Android RecyclerView Item使用动画被遮挡,ClipChildren也无效的坑_第1张图片


布局文件如下




    

        

            
        
    


图中从下到上有4层布局,绿色的Framelayout,橙色的Framelayout,黑色的Framelayout,以及紫色的View,我们分别把他们命名为祖父,父亲,儿子,孙子。

 
我们想要实现图中的效果,也就是孙子超出儿子显示,那么就需要在父亲布局加上属性android:clipChildren="false"。这样就保证了孙子可以超出儿子显示。但是由于儿子和孙子都是父亲的子布局,要超出父亲布局,还需要在祖父布局上设置android:clipChildren="false",否则儿子和孙子布局都会被父布局所裁剪。这样就完成了图中的效果。

看一个实际案例。


在做一个动画效果,当RecyclerView的Item获取焦点就要放大。 
但是做出来的实际效果是,当Item获取焦点之后,是放大了不假,但是超出父布局的那部分被截掉了。 
Android RecyclerView Item使用动画被遮挡,ClipChildren也无效的坑_第2张图片

Android RecyclerView Item使用动画被遮挡,ClipChildren也无效的坑_第3张图片

其实问题的关键就是,RecyclerView的父布局指定了高度,而item也指定了高度,而父布局的高度不足以包住item。在这种情况下,即使设置了clipchidren也无效。所以只要将父布局的高度增大到足够包裹下放大后的item即可。

你可能感兴趣的:(Android,UI)