Android: with RippleEffect & StateListAnimator

前端 未结 2 1258
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-19 08:37

I have a layout, that includes another layout:



        
2条回答
  •  南方客
    南方客 (楼主)
    2021-02-19 09:17

    Based on the thread Does Android XML Layout's 'include' Tag Really Work? and LayoutInflater.java it seems tag only supports android:id, layout_* and android:visibility attributes. So your code to set background and stateListAnimator have no effect.

    To fix the below issue with @Stepane's code :

    your method enables the ripple effect properly, however the SLA isn't fired. I cannot see any elevation taking place

    If the inflated view is transparent, then the elevation is not visible, you have to set viewOutline or use some non-transparent color for the view to see the shadow.

    An extract from ViewOutlineProvider documentation:

    Interface by which a View builds its Outline, used for shadow casting and clipping.

    To set the outlineProvider you can make use of View#setOutlineProvider (ViewOutlineProvider provider) method or you can set via android:outlineProvider xml tag.

    Updated Code:

    LinearLayout root =(LinearLayout) findViewById(R.id.container);
    StateListAnimator sla = AnimatorInflater.loadStateListAnimator(this, R.animator.lift_up);
    root.setStateListAnimator(sla);
    root.setClickable(true);
    root.setOutlineProvider(ViewOutlineProvider.PADDED_BOUNDS);
    root.setBackground(ContextCompat.getDrawable(this, R.drawable.ripple_effect));
    

    ripple_effect.xml

    
      
        
                        
            
        
      
    
    

    res/animator/lift_up.xml

    
      
        
      
      
        
      
    
    

提交回复
热议问题