Android实现网易严选标签栏滑动效果-创新互联
标签栏是一个非常常见的控件,似乎也是一个比较简单的控件,但如果在标签下方加个下划线的话,就还是可以玩出挺多花来的。
在北辰等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站建设 网站设计制作按需定制,公司网站建设,企业网站建设,品牌网站设计,全网营销推广,成都外贸网站建设,北辰网站建设费用合理。网易严选的标签栏就做的很不错,里面隐藏着诸多细节:
- 手动滑动页面,下划线会跟着滑动。
- 选择一个标签后,下划线会有滑动过去的动画。
- 选择最左端或最右端的标签,标签栏会进行滑动,使得标签向中间靠拢(如果可以滑的话)。
仔细分析下,需要在简单标签栏的基础上实现以下逻辑:
- 画出下划线。
- 监听手动滑动页面事件,实时更新下划线位置。
- 切换标签时,开始下划线滑动的动画,并判断是否要同时滑动标签栏。
我做了一个样例程序,其中的较难点在于计算下划线的位置,和下划线的动画效果。
// 根据当前选定的tab,得到indicator应该移动到的位置 private PairgetIndicatorTargetLeftRight(int position, float positionOffset) { View tab = tabsContainer.getChildAt(position); Pair indicator = getIndicatorLeftRight(tab); float targetLeft = indicator.first; float targetRight = indicator.second; // 如果positionOffset不为0,indicator正处于两个tab之间,需进行加权计算得到它的位置 if (positionOffset > 0f && position < tabCount - 1) { View nextTab = tabsContainer.getChildAt(position + 1); Pair indicatorForNextTab = getIndicatorLeftRight(nextTab); float left = indicatorForNextTab.first; float right = indicatorForNextTab.second; targetLeft = (positionOffset * left + (1f - positionOffset) * targetLeft); targetRight = (positionOffset * right + (1f - positionOffset) * targetRight); } return new Pair<>(targetLeft, targetRight); } private Pair getIndicatorLeftRight(View tab) { float left = tab.getLeft(); float right = tab.getRight(); if (indicatorMode == IndicatorMode.WRAP && tab instanceof TextView) { TextView tabTextView = (TextView) tab; paint.setTextSize(tabTextView.getTextSize()); float textLength = paint.measureText(tabTextView.getText().toString()); float middle = (left + right) / 2f; left = middle - textLength / 2f; right = middle + textLength / 2f; } return new Pair<>(left, right); }
当前题目:Android实现网易严选标签栏滑动效果-创新互联
文章出自:http://scyanting.com/article/dhcpdh.html