美文网首页Android开发
RecyclerView首个item收缩隐藏

RecyclerView首个item收缩隐藏

作者: 有点健忘 | 来源:发表于2018-09-29 11:36 被阅读39次

    参考这里
    看到这个效果不错,本来想学习下,不过感觉代码太多,就想自己实现,效果如下

    image.png

    第一item消失的时候,有收缩,透明度变小的动画,出现的时候当然是放大了。

    看到第一眼,其实应该能看出,除了第一个item,其他的就是线性LiearLayoutManager的效果,那为啥不在这个基础上修改了。
    所以就继承LiearLayoutManager,处理下滚动事件,在滚动的时候动态修改第一个item的大小位置即可

    完整代码如下,很简单,没多少

    import android.content.Context
    import android.support.v7.widget.LinearLayoutManager
    import android.support.v7.widget.RecyclerView
    import android.view.View
    
    class LayoutManagerScaleFirst:LinearLayoutManager{
        constructor(context: Context?) : super(context)
        constructor(context: Context?, orientation: Int, reverseLayout: Boolean) : super(context, orientation, reverseLayout)
    
        var oldChild0:View?=null;
        val scaleMinFactor=0.7f //from 0 to 1
        override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler, state: RecyclerView.State?): Int {
            val result=super.scrollVerticallyBy(dy, recycler, state)
            if(childCount>1){
                val child1=getChildAt(1)
                val child0=getChildAt(0)
                if(oldChild0!=null&&oldChild0!=child0){
                    resetChild(oldChild0!!)
                }
                oldChild0=child0
                val scale=scaleMinFactor+(1-scaleMinFactor)*(child1.top)/getDecoratedMeasuredHeight(child1)
    
                viewAnimate(child0,scale,getDecoratedMeasuredHeight(child1)-child1.top.toFloat())
                if(scale<scaleMinFactor){
                    resetChild(child0)
                    removeAndRecycleView(child0,recycler)
                }
            }
            return  result
        }
        private fun resetChild(child:View){
            viewAnimate(child,1f,0f)
        }
    
        private fun viewAnimate(child: View,factor:Float,transY:Float){
            child.apply {
                pivotX=this.width/2f
                pivotY=this.height/1f
                scaleX=factor;
                scaleY=factor;
                alpha=factor;
                translationY=transY
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:RecyclerView首个item收缩隐藏

        本文链接:https://www.haomeiwen.com/subject/seuvoftx.html