仿糯米首页菜单左右滑动效果

来源:互联网 发布:淘宝商品sku设置规则 编辑:程序博客网 时间:2024/05/16 18:45

水平滑动控件用RecyclerView,水平滚动到指定位置用其smoothScrollToPosition(position)方法。但是这个缓慢滑动的速度有些快,想要变慢一些是没有原生方法的。
从smoothScrollToPosition的源代码中知道,滚动效果其实是调用了LayoutManager的smoothScrollToPosition(RecyclerView recyclerView, State state,int position)方法,于是写了一个LayoutManager的实现类来控制移动每个像素上花费的时间。

class ScrollSpeedLinearLayoutManger(context: Context) : LinearLayoutManager(context) {    private var mSpead = 4f    override fun smoothScrollToPosition(recyclerView: RecyclerView, state: RecyclerView.State, position: Int) {        startSmoothScroll(object : LinearSmoothScroller(recyclerView.context) {            override fun computeScrollVectorForPosition(targetPosition: Int): PointF {                return this@ScrollSpeedLinearLayoutManger.computeScrollVectorForPosition(targetPosition)            }            override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {                return mSpead / displayMetrics.density            }        }.apply { targetPosition = position })    }    fun setSpead(spead: Float) {        mSpead = spead    }}

然后在对RecyclerView设置滑动效果时调用下面的方法,即实现了糯米中提示有其余菜单的动画提示效果

    public void scrollListview(int position) {        recyclerView.smoothScrollToPosition(position);        recyclerView.postDelayed(new Runnable() {            @Override            public void run() {                recyclerView.smoothScrollToPosition(0);            }        }, 700);    }

参考文章http://blog.csdn.net/a86261566/article/details/50906456