- 源码类别:多页切换TabHost
- 源码大小:未知
- 编码格式:gbk,utf8,不限
- 运行环境:Android studio
最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下:


allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.Dawish:FlymeTabStrip:v1.0.2'
}Attrs
<declare-styleable name="FlymeTabStrip">
<attr name="indicatorHeight" format="dimension" />
<attr name="indicatorColor" format="color" />
<attr name="indicatorMargin" format="dimension" />
<attr name="indicatorTextColor" format="color" />
<attr name="indicatorTextSize" format="dimension" />
<attr name="selectedIndicatorTextSize" format="dimension" />
</declare-styleable>Sample
代码解释
指示器的动画效果,主要依赖Viewpager的滑动监听器,在Viewpager的滑动过程中不断重绘只是控件就可以实现指示器的位移和缩放动画效果。首先我们讲解一下ViewPager的三个滚动监听方法:
/**
* viewPager状态改变监听
*
*/
private class PagerStateChangeListener implements OnPageChangeListener {
/**
* viewpager状态监听
* @param state
*/
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
scrollToChild(viewPager.getCurrentItem(), 0);
}else if(state == ViewPager.SCROLL_STATE_SETTLING){
}else if(state == ViewPager.SCROLL_STATE_DRAGGING){
}
}
/**
* viewpager正在滑动,会回调一些偏移量
* 滚动时,只要处理指示器下方横线的滚动
* @param position 当前页面
* @param positionOffset 当前页面偏移的百分比
* @param positionOffsetPixels 当前页面偏移的像素值
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
currentPosition = position;
currentPositionOffset = positionOffset;
scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth()));
invalidate();
}
/**
* page滚动结束
* @param position 滚动结束后选中的页面
*/
@Override
public void onPageSelected(int position) {
selectedPosition = position;
updateTabStyle();
}
}其中最主要的方法就是:
/**
* viewpager正在滑动,会回调一些偏移量
* 滚动时,只要处理指示器下方横线的滚动
* @param position 当前页面
* @param positionOffset 当前页面偏移的百分比
* @param positionOffsetPixels 当前页面偏移的像素值
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
currentPosition = position;
currentPositionOffset = positionOffset;
scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth()));
invalidate();
}geScrolled方法图片说明:

本站资源仅限于学习研究,严禁从事商业或者非法活动!
源码搜藏网所有源码来自互联网转载与用户上传分享,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!