49
GitHub - CCY0122/FocusLayoutManager: 有焦点item的水平/垂直滚动RecyclerView-Layou...
source link: https://github.com/CCY0122/FocusLayoutManager
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
FocusLayoutManager
有焦点item的水平/垂直滚动RecyclerView-LayoutManager。仿Android豆瓣书影音“推荐“频道列表布局
效果
截图:
依赖
api 'com.ccy:FocusLayoutManager:1.0.1'
// (or implementation)
使用
focusLayoutManager = new FocusLayoutManager.Builder() .layerPadding(dp2px(this, 14)) .normalViewGap(dp2px(this, 14)) .focusOrientation(FocusLayoutManager.FOCUS_LEFT) .isAutoSelect(true) .maxLayerCount(3) .setOnFocusChangeListener(new FocusLayoutManager.OnFocusChangeListener() { @Override public void onFocusChanged(int focusdPosition, int lastFocusdPosition) { } }) .build(); recyclerView.setLayoutManager(focusLayoutManager);
各属性意义见图:
注意:因为item在不同区域随着滑动会有不同的缩放,所以实际layerPadding、normalViewGap会被缩放计算。
调整动画效果:
new FocusLayoutManager.Builder() ...... .setSimpleTrasitionListener(new FocusLayoutManager.SimpleTrasitionListener() { @Override public float getLayerViewMaxAlpha(int maxLayerCount) { return super.getLayerViewMaxAlpha(maxLayerCount); } @Override public float getLayerViewMinAlpha(int maxLayerCount) { return super.getLayerViewMinAlpha(maxLayerCount); } @Override public float getLayerChangeRangePercent() { return super.getLayerChangeRangePercent(); } //and more //更多可重写方法和释义见接口声明 }) .build();
自定义动画/滚动监听:
如果你想在滑动时不仅仅改变item的大小、透明度,你有更多的想法,可以监听TrasitionListener,该监听暴露了很多关键布局数据,
...... .setSimpleTrasitionListener(null) //如果默认动画不想要,移除之。or use removeTrasitionlistener(XXX) .addTrasitionListener(new FocusLayoutManager.TrasitionListener() { @Override public void handleLayerView(FocusLayoutManager focusLayoutManager, View view, int viewLayer, int maxLayerCount, int position, float fraction, float offset) { } @Override public void handleFocusingView(FocusLayoutManager focusLayoutManager, View view, int position, float fraction, float offset) { } @Override public void handleNormalView(FocusLayoutManager focusLayoutManager, View view, int position, float fraction, float offset) { } })
各参数意义见接口注释。
实际上SimpleTrasitionListener
内部就会被转为TrasitionListener
。可参考转换类是怎么做的:TrasitionListenerConvert
源码解析
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK