900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android 自定义viewpager指示器 Android自定义View Flyme6的Viewpager指示器

android 自定义viewpager指示器 Android自定义View Flyme6的Viewpager指示器

时间:2023-02-06 20:07:57

相关推荐

android 自定义viewpager指示器 Android自定义View Flyme6的Viewpager指示器

最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下:

Gradle

allprojects {

repositories {

maven { url 'https://jitpack.io' }

}

}

dependencies {

compile 'com.github.Dawish:FlymeTabStrip:v1.0.2'

}

Attrs

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) { // 0 空闲状态 pager处于空闲状态

scrollToChild(viewPager.getCurrentItem(), 0);

}else if(state == ViewPager.SCROLL_STATE_SETTLING){ // 2 正在自动沉降,相当于松手后,pager恢复到一个完整pager的过程

}else if(state == ViewPager.SCROLL_STATE_DRAGGING){ // 1 viewpager正在被滑动,处于正在拖拽中

}

}

/**

* viewpager正在滑动,会回调一些偏移量

* 滚动时,只要处理指示器下方横线的滚动

* @param position 当前页面

* @param positionOffset 当前页面偏移的百分比

* @param positionOffsetPixels 当前页面偏移的像素值

*/

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

currentPosition = position;

currentPositionOffset = positionOffset;

// 处理指示器下方横线的滚动,scrollToChild会不断调用ondraw方法,绘制在重绘下划线,这就是移动动画效果

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会不断调用ondraw方法,绘制在重绘下划线,这就是移动动画效果

scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth()));

invalidate();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。