【Android 动画】封装好的可滑动指示器indicator,可直接拿来使用(附demo)
2017-07-03 14:18
555 查看
在之前的开发中,指示器都是跟viewpager配合着使用,这样如果想在切换时实现indicator的平滑滚动,只需要配合使用onPageScrolled就可以了。因为onPageScrolled会不断回调,这样就可以在这里去实时刷新UI。
而如果indicator不是配合ViewPager使用呢?就像下面这个页面,就没有配合ViewPager一起使用。下面使用的是RecyclerView,当点击上面的indicator,下面的RecyclerView会滑到相应的位置。这个时候,如何实现指示器indicator在切换tab的过程中平滑滑动呢?
直接上代码:
自定义View的类文件
可以看到代码逻辑非常简单,其实中间还是遇到了一些坑,不过这里就不详细介绍了,只是讲解如何使用。
接下来是xml文件:
里面的View就是可滑动的indicator。
那么如何使用呢?
1、这个是指定了indicatorView的宽度为屏幕宽度,并且其中的可滑动indicator宽度 = 屏幕宽度 / 选项个数
2、这个是指定滑到第几个tab,注意“负号”
okay了,这样可平滑滑动的indicator就脱离开Viewpager了。
如需要demo,或有任何问题可以邮件联系我。邮件地址为: zhshan@ctrip.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~华丽丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
由于最近很多小伙伴给我发邮件表示,希望我能把这个控件封装一下,趁着不忙的时候,我就做了个封装。可以说是封装得非常彻底,你只需要在xml中引入控件:
然后,在java代码中初始化一下,传入的数字为tab的总个数。
然后在需要滑动到哪个tab时,只需要调用以下方法,并传入这个tab的index。
使用起来非常简便。点击这里下载demo。
而如果indicator不是配合ViewPager使用呢?就像下面这个页面,就没有配合ViewPager一起使用。下面使用的是RecyclerView,当点击上面的indicator,下面的RecyclerView会滑到相应的位置。这个时候,如何实现指示器indicator在切换tab的过程中平滑滑动呢?
直接上代码:
自定义View的类文件
package ctrip.android.tour.component; import android.widget.LinearLayout; import android.content.Context; import android.support.annotation.Nullable; import android.util.AttributeSet import android.widget.Scroller; /** * @author Zhenhua on 2017/6/6 19:39. * @email zhshan@ctrip.com */ public class ScrollableIndicator extends LinearLayout { public ScrollableIndicator(Context context, @Nullable AttributeSet attrs) { super(context, attrs); scroller = new Scroller(context); } private Scroller scroller; public void smoothScrollTo(int destX) { int finalX = scroller.getFinalX(); int deltaX = destX - finalX; scroller.startScroll(finalX, 0, deltaX, 0, 1000); invalidate(); } @Override public void computeScroll() { if (scroller.computeScrollOffset()) { scrollTo(scroller.getCurrX(), 0); postInvalidate(); } } }
可以看到代码逻辑非常简单,其实中间还是遇到了一些坑,不过这里就不详细介绍了,只是讲解如何使用。
接下来是xml文件:
<ctrip.android.tour.component.ScrollableIndicator android:layout_width="match_parent" android:layout_height="2dp" android:id="@+id/indicator" android:background="@drawable/cttour_around_travel_border_bottom" android:orientation="vertical"> <View android:layout_width="10dp" android:layout_height="match_parent" android:background="#009fde" android:id="@+id/indicator_content"/> </ctrip.android.tour.component.ScrollableIndicator>
里面的View就是可滑动的indicator。
那么如何使用呢?
1、这个是指定了indicatorView的宽度为屏幕宽度,并且其中的可滑动indicator宽度 = 屏幕宽度 / 选项个数
int screeWidth = CommonUtil.getScreenWidth(context); final int size = tabItems.size(); int indicator_width = screeWidth / size; indicatorView.getLayoutParams().width = indicator_width; indicatorView.setLayoutParams(new LinearLayout.LayoutParams(indicator_width, LinearLayout.LayoutParams.MATCH_PARENT));
2、这个是指定滑到第几个tab,注意“负号”
//Animation of indicator int screeWidth = CommonUtil.getScreenWidth(context); int part = screeWidth / total; indicator.smoothScrollTo(-index * part);
okay了,这样可平滑滑动的indicator就脱离开Viewpager了。
如需要demo,或有任何问题可以邮件联系我。邮件地址为: zhshan@ctrip.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~华丽丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
由于最近很多小伙伴给我发邮件表示,希望我能把这个控件封装一下,趁着不忙的时候,我就做了个封装。可以说是封装得非常彻底,你只需要在xml中引入控件:
<com.ctrip.indicatorapplication.indicator.IndicatorView android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="2dp" />
然后,在java代码中初始化一下,传入的数字为tab的总个数。
final IndicatorView indicatorView = findViewById(R.id.indicator); indicatorView.init(5);
然后在需要滑动到哪个tab时,只需要调用以下方法,并传入这个tab的index。
indicatorView.smoothSlideTo(index);
使用起来非常简便。点击这里下载demo。
相关文章推荐
- Android自定义控件9----scrollTo/scrollBy实现滑动和直接绘制滑动的对比使用demo测试
- Android 具有动画的 Viewpager滑动CircleIndicator指示器
- 【Android 自定义View】封装好的轮播图组件,可直接使用(附demo)
- 【界面优化】使用viewpagerindicator添加下划线滑动动画
- Android进阶学习-属性动画(使用Animator封装特效工具类2)
- android 帧动画的使用以及dialog使用帧动画(附demo)
- Android小票打印机连接 (已封装好,可直接使用)
- 封装好的Android广告栏,效果较好功能强大,可以很方便地直接使用
- 开源库【ViewPagerIndicator】配合ViewPager使用的圆点指示器,圆点随滑动而移动
- Android网络请求--动态加载的效果(已封装、可直接使用)
- js写圆形动态进度条圆形指示器,动画怎么实现,进度条变色,radialIndicator.js的使用说明用法
- IndicatorSeekBar:Android自定义View,滑动显示进度气泡指示器
- 【原创】不用封装jar包 直接引入工程使用的方法(类似android的 is Library功能)
- Android进阶学习-一般动画(使用Animation封装特效工具类2)
- 【Android 动画】随ScrollView滑动头部缩放动画(附demo)
- android利用Chronometer实现倒计时(已封装,可直接使用)
- Android 自定义的颜色滑动转换ViewPager指示器 ColorTransformIndicator
- android 封装好的ViewPagerIndicator指示器
- Android程序开发之使用Design包实现QQ动画侧滑效果和滑动菜单导航
- Android自定义控件7----滑动动画scrollTo/scrollBy使用