Skip to content

Repository files navigation

Download

FocusLayoutManager

有焦点item的水平/垂直滚动RecyclerView-LayoutManager。仿Android豆瓣书影音“推荐“频道列表布局

效果


截图:


GIF:
gif1gif2


可自己监听滚动编写效果,如修改成仿MacOS文件浏览:

依赖

implementation 'com.ccy:FocusLayoutManager:1.0.2'
// (or api)

使用

focusLayoutManager =
newFocusLayoutManager.Builder()
.layerPadding(dp2px(this, 14))
.normalViewGap(dp2px(this, 14))
.focusOrientation(FocusLayoutManager.FOCUS_LEFT)
.isAutoSelect(true)
.maxLayerCount(3)
.setOnFocusChangeListener(newFocusLayoutManager.OnFocusChangeListener() {
@OverridepublicvoidonFocusChanged(intfocusdPosition, intlastFocusdPosition) {
}
})
.build();
recyclerView.setLayoutManager(focusLayoutManager);

各属性意义见图:

注意:因为item在不同区域随着滑动会有不同的缩放(受动画控制),所以实际视觉上堆叠view的间距、普通view的间距未必等于layerPadding、normalViewGap

调整动画效果:

newFocusLayoutManager.Builder()
......
.setSimpleTrasitionListener(newFocusLayoutManager.SimpleTrasitionListener() {
@OverridepublicfloatgetLayerViewMaxAlpha(intmaxLayerCount) {
returnsuper.getLayerViewMaxAlpha(maxLayerCount);
}
@OverridepublicfloatgetLayerViewMinAlpha(intmaxLayerCount) {
returnsuper.getLayerViewMinAlpha(maxLayerCount);
}
@OverridepublicfloatgetLayerChangeRangePercent() {
returnsuper.getLayerChangeRangePercent();
}
//and more//更多可重写方法和释义见接口声明
})
.build();

自定义动画/滚动监听:

如果你想在滑动时不仅仅改变item的大小、透明度,你有更多的想法,可以监听TrasitionListener,该监听暴露了很多关键布局数据,

 ......
.setSimpleTrasitionListener(null) //如果默认动画不想要,移除之。or use removeTrasitionlistener(XXX) 
.addTrasitionListener(newFocusLayoutManager.TrasitionListener() {
@OverridepublicvoidhandleLayerView(FocusLayoutManagerfocusLayoutManager,
Viewview, intviewLayer,
intmaxLayerCount, intposition,
floatfraction, floatoffset) {
}
@OverridepublicvoidhandleFocusingView(FocusLayoutManagerfocusLayoutManager,
Viewview, intposition,
floatfraction, floatoffset) {
}
@OverridepublicvoidhandleNormalView(FocusLayoutManagerfocusLayoutManager, Viewview, intposition, floatfraction, floatoffset) {
}
})

各参数意义见接口注释。 实际上SimpleTrasitionListener内部就会被转为TrasitionListener。可参考转换类是怎么做的:TrasitionListenerConvert

源码解析

https://blog.csdn.net/ccy0122/article/details/90515386

About

有焦点item的水平/垂直滚动RecyclerView-LayoutManager。仿Android豆瓣书影音“推荐“频道列表布局

Topics

Resources

Stars

833 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages